2014-06-17 31 views
7

Tôi có một dự án liên kết đến nửa tá thư viện, trong đó có OpenCV.
Vì Biến thể phát hành bị lỗi, trong khi Debug hoạt động tốt (chậm hơn rất nhiều), tôi muốn biên dịch dự án của mình ở cấu hình RelWithDebInfo.
Tuy nhiên, phiên bản Debug của thư viện OpenCV được bao gồm thay vì Release (OpenCV không có biến thể RelWithDebInfo). Điều này làm cho liên kết các lỗi như:CMake RelWithDebInfo liên kết tới các thư viện gỡ lỗi

opencv_core249d.lib (alloc.obj): lỗi LNK2038: không phù hợp được phát hiện cho 'RuntimeLibrary': giá trị 'MDd_DynamicDebug' không phù hợp với giá trị 'MD_DynamicRelease' trong MyProject.obj

Làm thế nào để giải quyết vấn đề này?

+0

Tôi giải quyết vấn đề này bằng cách không bao giờ sử dụng mục tiêu CÀI ĐẶT trong cửa sổ. Thay vào đó, hãy trỏ các biến PROJECTNAME_DIR vào thư mục gốc nơi bạn đã xây dựng thư viện. Tôi cũng xây dựng tất cả các phụ thuộc với trình biên dịch tôi đang sử dụng và không bao giờ sử dụng các gói nhị phân. Nếu bạn xây dựng opencv từ nguồn thì nó vẫn loại bỏ cấu hình RelWithDebInfo? – drescherjm

+0

Tôi đã xây dựng OpenCV từ nguồn. Tôi không có vấn đề này với OpenCV được biên dịch trước. –

Trả lời

14

Giải pháp: thêm vào CMakeLists.txt, sau khi cuộc gọi đến FIND_PACKAGE(OpenCV):

set_target_properties(${OpenCV_LIBS} PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE) 
+1

Điều này đã lưu cho tôi rất nhiều tìm kiếm và làm việc. Cảm ơn :) – Baiz

+0

Điều này làm việc hầu hết thời gian cho tôi nhưng một số mục tiêu vẫn đi qua như các thư viện gỡ lỗi. Tôi đã liệt kê tất cả các mục tiêu opencv có thể duy nhất để đảm bảo rằng nó cũng được các mục tiêu phụ thuộc. –

1

Tôi đã sử dụng câu trả lời ở trên bởi Dženan nhưng phát hiện ra rằng một số thư viện opencv bỏ qua điều này và vẫn liên kết debug! Điều này dẫn đến một dự án msvc liên kết các thư viện gỡ rối và phát hành hỗn hợp cho opencv. Giải pháp của tôi là tạo một OpenCVModules-relwithdebinfo.cmake mới trong thư mục lib của trình cài đặt opencv của bạn, đây là một bản sao của tệp OpenCVModules-release.cmake. Sau đó thay thế tất cả các tham chiếu đến RELEASE bằng RELWITHDEBINFO. Điều này tạo ra một dự án msvc liên kết hoàn toàn với lib phát hành opencv. Lợi ích bổ sung là bạn không cần phải thay đổi các tệp CMake của dự án của bạn để giải thích cho điều này.

+0

Bạn đã gửi báo cáo lỗi cho CMake chưa? Nó là tốt hơn để giải quyết một vấn đề hơn là làm việc xung quanh nó, đó là những gì bạn đề nghị. –

+0

Tôi không thể chắc chắn nếu đây là một vấn đề CMake hoặc một vấn đề với các kịch bản CMake của OpenCV. Tôi vẫn đang nghiên cứu thêm khi có thời gian. –

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