01/10/2018, 13:39

Thư viện được build trên MSVC có thể dùng cho dự án dùng compiler MINGW hay không?

Mình đang vật vã với bộ OpenCv 3.3.0
Mình build nó với CMake và MSVC. Thư viện build xong chạy tốt với một project test dung compiler là MSVC.

Mình chuyển thư viện vào dự án với QT dung compiler MINGW thì lỗi không thể chạy được và báo lỗi :

undefined reference to cv::VideoCapture(0)

Theo mình điều tra thì VideoCapture(int index) khai báo trong videoio.hpp như vậy rất có khả năng nó sẽ liên quan đến opencv_videoio.lib.
Các tập tin .hpp đã include trình tự như nhau. Để chắc ăn mình đã Add toàn bộ file .lib vào dự án nhưng vẫn xịt.

Vậy nhờ các cao thủ chỉ giáo vấn đề như tiêu đề.
Xin cảm ơn nhiều.

Dark.Hades viết 15:46 ngày 01/10/2018

Mặc định thì một số .lib mà do M$ thực hiện build có thể sử dụng được ở cả mingw và vs, tuy nhiên những lib tự build thì khó nói. Nên tự build lại khi đổi compiler.

QT cũng có parse CMakeLists.txt, bác thử parse rồi compile lại xem.

Update:

Add toàn bộ file .lib vào dự á

Cái này bác add như thế nào?
Có include library directory không?
.lib đó là static lib hay shared?

Văn Dương viết 15:54 ngày 01/10/2018

Khi dung CMake, mình chon Compiler là MSVC thì OK. Nhưng chon sang MinGW thì bão lỗi tập tin không hợp lệ.
Sau khi Generate trên CMake thì nó cho mình 1 solutuion dành cho VS và dung VS để build.

File xuất ra bao gồm các dll và .shared lib .

Trên VS add bằng cửa sổ quản lý Solution của VS.

Trên QT mình Add bằng cách thêm code vào trong file .pro Các tập tin lib để tại thư mục gốc dự án.

LIBS += opencv_core330
LIBS += opencv_highgui330
.....
Dark.Hades viết 15:47 ngày 01/10/2018

Rất có khả năng là nó chưa load được thư viện shared.
Bác thử mở tab compile lên xem nó báo lỗi gì trong lúc chạy.

Ở phần thêm thư viện thì bác nên khai báo đường dẫn tuyệt đối cho nó an toàn:

LIBS += $$PWD/libs/WS2_32.lib

$$PWD là vị trí mà file .pro ở

//==================

https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows

Ở đây họ hướng dẫn đầy đủ này, bác làm theo xem thử.

Văn Dương viết 15:47 ngày 01/10/2018

Mình đã add hẳn đường dẫn tuyệt đối dạng :

LIBS += "D:/ABC/XYZ/lib.lib" 

Nhưng vẫn không được.
Nếu sai đường dẫn QT nó sẽ báo ngay nhưng ở đây nó không báo gì.

Mình dính lỗi ngay lúc compile : “undefined reference to cv::VideoCapture(0)”

Mình cũng làm going hướng dẫn như cấu trúc -lopecv… luôn báo lỗi.
Để mình chơi thẳng với dll xem có khác không.

Văn Dương viết 15:39 ngày 01/10/2018

Nguyên nhân là MINGW chảnh không chơi với MSVC.
Mình đã select sang compiler là MSVC thì ngon lành luôn.

Bài liên quan
0