2009-04-08 32 views
11

Tôi đang sử dụng VS2008 để phát triển một dll COM theo mặc định sử dụng CRT phiên bản 9 nhưng tôi đang sử dụng TSF (khung dịch vụ văn bản) không tương thích với CRT mới. Tôi nghĩ rằng giải pháp là sử dụng một trong những tương thích như vậy làm thế nào tôi có thể chỉ định phiên bản CRT?Làm thế nào để thực thi trình biên dịch C++ để sử dụng phiên bản CRT cụ thể?

+0

Xem câu trả lời trước: http://stackoverflow.com/questions/693250/vs-2008-link-against-older-c-runtime –

Trả lời

10

Tôi hết lòng tham gia khuyến nghị không để thay đổi phiên bản CRT bạn liên kết theo cách thủ công. Tuy nhiên, vì một số lý do (mà tôi không thể tưởng tượng) đây là hành động phù hợp với bạn, cách làm như vậy là thay đổi manifest cho dự án của bạn.

Trước tiên hãy đảm bảo tệp kê khai là không phải được tạo trên mọi bản dựng (trên VS2005: Thuộc tính cấu hình/Trình liên kết/Tệp kê khai/Tạo tệp kê khai), vì nó sẽ ghi đè các thay đổi thủ công của bạn. Ngoài ra hãy chắc chắn rằng có cách ly được kích hoạt. Tiếp theo, định vị tệp kê khai - phải ở mức $ (IntDir) (ví dụ: Gỡ lỗi). Bạn sẽ thấy một mục tương tự như -

<dependency> 
    <dependentAssembly> 
     <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> 
    </dependentAssembly> 
    </dependency> 

(Tất nhiên là để gỡ lỗi). Bạn cần chỉnh sửa phiên bản và thuộc tính publicKeyToken của phần tử CRT. Bạn có thể kiểm tra các tệp tại thư mục WINDOWS \ WinSxS cục bộ của bạn để xem các phiên bản có sẵn. Kiểm tra here cách trích xuất publicKeyToken khi bạn tìm thấy phiên bản mình muốn. (Mặc dù lần đầu tiên tôi thử và xem trực tiếp các biểu hiện của các dự án khác, liên kết với phiên bản CRT mong muốn của bạn).

Nếu bạn đến đó, hãy chờ đợi một số nước thô. Bạn có thể có một số may mắn nếu ứng dụng của bạn là một ứng dụng giao diện điều khiển không liên kết với các thành phần Side-by-Side khác (MFC, OpenMP, v.v.). Nếu ứng dụng của bạn là không tầm thường, tôi sẽ ngạc nhiên nếu không có một số phụ thuộc phiên bản phức tạp không tuân theo các thành phần SxS.

(chỉnh sửa) Bạn cũng cần phải phân phối với ứng dụng của mình CRT cụ thể mà bạn đang sử dụng. Đây là someone người đã làm điều đó.

2

Cách dễ nhất là xây dựng DLL của bạn với phiên bản VC++ sử dụng CRT tương thích với TFS.

Tôi không nghĩ rằng bạn nên liên kết tệp DLL của mình với một phiên bản CRT khác, trừ khi bạn cũng sử dụng cùng một phiên bản của tệp tiêu đề. Và cách đơn giản nhất để làm điều đó sẽ được sử dụng VC++ phiên bản đúng ...

Nếu bạn vẫn muốn cố gắng, bạn có thể:

  • đi đến "Cấu hình settings-> Linker-> Input- > Bỏ qua thư viện cụ thể "và nhập vào crt bạn đang sử dụng (libc.lib, libcmt.lib, v.v. xem số này code project article để biết chi tiết).
  • Nhập tên phiên bản crt bạn muốn sử dụng trong "Cài đặt cấu hình-> Trình liên kết-> Đầu vào-> Phụ thuộc bổ sung" và đường dẫn trong "Cài đặt cấu hình-> Liên kết-> Chung-> Thư mục bổ sung".

Bạn cũng có thể thử thay đổi các thư mục mặc định trong "Tools-> Options-> Projects và solution-> VC++ folders-> library files". Có thể thay đổi lib (VCInstallDir) lib thành đường dẫn nơi bạn phiên bản khác của CRT cư trú sẽ làm thủ thuật

0

Đừng cố gắng sử dụng VS9 và liên kết đến phiên bản CRT khác.

Nếu bạn cần ứng dụng của mình liên kết đến một CRT khác, hãy nói CRT của VS8, thì bạn phải biên dịch & liên kết ứng dụng của bạn trong phiên bản đó của VS.

+0

Lý do chính xác mà bạn không thể liên kết với CRT mà bạn chọn là gì? Bạn có thể xây dựng? –

0

Các giải pháp làm việc cho tôi với Visual Studio Express 2013 x64 + x64 OpenCV 2.4.9 biên soạn, gỡ lỗi (tôi tích hợp trong LV2013 x64), nhưng nó phải làm việc cho bất kỳ khác VS-phiên bản:

1) Nhấp chuột phải vào Giải pháp> Thuộc tính> Gỡ lỗi Tệp Nguồn ...

2) Có thể có hai entires (tùy thuộc vào thư mục VS-install của bạn) ... C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ atlmfc C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ crt

Với những nó sẽ làm việc cho Visual Studio 2013 Express nhưng cũng nên làm việc cho năm 2013. Nếu bạn đã có Visual Studio 10 hoặc 11 chỉ cần gõ "Microsoft Visual Studio 11.0" hoặc 10,0 trong mỗi. Bạn cũng có thể thêm chúng.

Các mục nhập này bạn có thể lấy từ OpenCV.sln của mình trong phần Giải pháp> Thuộc tính> Tệp nguồn gỡ lỗi (như được mô tả ở trên). Và như đã được decribed: CRT cần phải phù hợp ... và điều này xảy ra ở nơi đó.

Các vấn đề liên quan