2012-05-13 68 views
8

Tôi đang cố gắng để thiết lập OpenCV 2.4 như sau:Làm thế nào để sử dụng các thư viện tĩnh OpenCV 2.4 với Visual Studio?

  • Tôi đã tải về và giải nén gói biên dịch sẵn để C:\OpenCV240.
  • Trong Visual Studio, tôi đã thêm C:\OpenCV240\build\include làm thư mục bao gồm bổ sung.
  • Hơn nữa, tôi đã thêm C:\OpenCV240\build\x86\vc10\staticlib làm thư mục bổ sung cho thư viện.
  • Và tôi đã chỉ định tất cả các tệp .lib có sẵn làm phụ thuộc bổ sung.

Khi tôi biên dịch chương trình "Hello World" của tôi (mà chỉ cần biên dịch tốt khi sử dụng DLL), tôi nhận được một thông báo lỗi rất nhiều như thế này:

1> msvcprtd.lib (MSVCP100D.dll): LNK2005 lỗi: "công cộng: __thiscall std :: _ Container_base12 :: ~ _Container_base12 (void)" (?? 1_Container_base12 @ std @@ QAE @ XZ) đã được xác định trong opencv_core240d.lib (matrix.obj)

Tôi đang làm gì sai?

Trả lời

10

Có vẻ như bạn cần chỉ định liên kết với thư viện thời gian chạy tĩnh C trong chương trình của bạn.

Nếu OpenCV được liên kết với CRT tĩnh và bạn sử dụng công cụ động, bạn sẽ nhận được các loại lỗi định nghĩa lại này.

Để thay đổi cài đặt này, hãy mở Thuộc tính của dự án và truy cập Configuration Properties -> C/C++ -> Code Generation.

Thay đổi Runtime Library từ Multi-threaded Debug DLL (/MDd) thành Multi-threaded Debug (/MTd). Làm tương tự cho các cấu hình khác của bạn, sử dụng biến thể không gỡ lỗi khi thích hợp.

+0

Điều này có tác dụng phụ hay không? – Niko

+1

Thật an toàn để làm điều này, trên thực tế bạn * cần * để có tất cả các thư viện được liên kết với nhau bằng cùng một phiên bản của CRT. Tuy nhiên quyết định về việc liệu bạn có muốn sử dụng các thư viện tĩnh và động không phải lúc nào cũng dễ dàng. – Fraser

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