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ể?
Trả lời
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 đó.
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
Đừ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.
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? –
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 đó.
- 1. Có trình biên dịch/phiên dịch nào để thực thi mã cho php 5.3 không?
- 2. Làm thế nào để thực thi mã C++ mà không biên dịch nó?
- 3. Làm thế nào để thực thi thứ tự bit struct với trình biên dịch GCC?
- 4. Làm thế nào để xác định trình biên dịch nào đã được sử dụng để biên dịch một tệp thực thi?
- 5. Làm thế nào để bộ tiền xử lý C thực thi mã trong khi biên dịch?
- 6. Bạn có thể tìm ra trình biên dịch nào được sử dụng để biên dịch chương trình không?
- 7. biên dịch C++ thành chương trình "thực"
- 8. Làm thế nào để sử dụng trình biên dịch Microsoft C++ với NetBeans?
- 9. Làm thế nào để sử dụng trình biên dịch 'yield return' để xây dựng một lớp
- 10. Thực thi phiên bản cụ thể của trình cắm maven thông qua dòng lệnh
- 11. Trình biên dịch sẽ chỉ biên dịch mã có thể được thực thi?
- 12. làm thế nào để chạy easy_install sử dụng một phiên bản python cụ thể
- 13. làm thế nào để kiểm tra phiên bản jdk sử dụng để biên dịch một file .class
- 14. Tôi làm cách nào để thêm yêu cầu phiên bản trình biên dịch tối thiểu?
- 15. Làm thế nào để kiểm dịch một phiên bản lật đổ cụ thể?
- 16. Nhận các tùy chọn trình biên dịch từ tệp thực thi đã biên dịch?
- 17. Trình biên dịch/trình biên dịch/trình biên dịch C++
- 18. Biên dịch chương trình C với kiến trúc cụ thể
- 19. biên dịch xuống một phiên bản - nhật thực, maven
- 20. Làm cách nào để kiểm tra phiên bản trình biên dịch LLVM mà Xcode đang sử dụng?
- 21. C để trình biên dịch brainfuck?
- 22. Làm cách nào tôi có thể đặt cờ trình biên dịch cụ thể cho một mục tiêu cụ thể trong cấu hình xây dựng cụ thể bằng CMake?
- 23. Làm thế nào để 'liên kết' tập tin đối tượng để thực thi/biên dịch nhị phân?
- 24. làm thế nào để biên dịch MPI và phiên bản không MPI của cùng một chương trình với automake?
- 25. Cách chọn phiên bản .NET để biên dịch dự án?
- 26. Biên dịch C++ cho các phiên bản Ubuntu khác nhau
- 27. Làm cách nào để biên dịch công cụ Google Courgette?
- 28. Làm cách nào để xác định nền tảng nào mà tệp thực thi được biên dịch?
- 29. Công cụ để thực thi đoạn mã
- 30. Tôi đang sử dụng phiên bản nào của C++?
Xem câu trả lời trước: http://stackoverflow.com/questions/693250/vs-2008-link-against-older-c-runtime –