Hello
Mình có 1 chương trình sử dụng đến 1 vài module trong thư viện opencv. Sử dụng trình biên dịch g++. Làm thế nào để compiler chương trình với dòng lệnh trên cmd
Thank you.
Làm thế nào để compiler chương trình có dùng thư viện opencv trên cmd sử dụng g++?
Vô cái thư viện opencv tìm pkconfig rồi fang
OCV sử dụng CMake làm build system, bạn cài CMake rồi configure theo hướng dẫn: https://perso.uclouvain.be/allan.barrea/opencv/cmake_config.html
Build ra binaries rồi thì cất đâu đó xong lúc viết thì link như bình thường: g++ -o main main.cpp -Wall -lopencv
$ pkg-config --libs-only-l opencv
-lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_ccalib -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_fuzzy -lopencv_hdf -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core -lglu32 -lopengl32 -ltbb.dll
đó tha hồ mà link nha
Hướng dẫn này build cho visual studio à bạn
Trước mình dùng opencv trên visual studio nên tải gói opencv cho windows đã build sẵn.
Giờ mình muốn compiler trên visual studio code (text editor). Sử dụng g++. Thấy bản 3.0 không có mục build cho mingw, mà chỉ có cho java, python, vc 12 và vc14
Nên mình đã dùng cmake build bản 3.0 cho mingw mà cứ bị lỗi. Hết lỗi videoio rồi lại lỗi khác :V
Mình dùng cmake build lại, có bỏ bớt được 1 số module không cần dùng không nhỉ
anh nói rõ chi tiết được không ạ
Ủa, mặc định CMake hỗ trợ generate hầu hết targets mà Có đó.
Trên Windows thì VS phổ biến hơn nên người ta chọn VS, mình dùng g++ thì cứ chọn MinGW.
Hi Nấm Lùn.
Có 3 cách dùng code thư viện.
- Bạn thêm thẳng mã nguồn vào dự án của mình. Thường là các thư viện nhỏ hoặc khi cần sửa code cả thư viện và code dự án.
- Thư viện tính libxxx.a nó là một file nén các file xxx.o
- Thư viện động libxxx.so nó là file nhị phân được load riêng. Bạn có thể tham khảo link
http://www.bogotobogo.com/cplusplus/libraries.php
Build thư viện bạn có thể thử msys là một hệ thống linux trên window.
P/S Nếu trên window tốt nhất là bạn nên dùng vs cho nhanh.
Nãy mình đã thử 2 lần rồi nhưng hay lỗi lặt vặt trong qua trình gererate lắm
Đợi mình chút, mình sẽ cập nhật ảnh lỗi trực tiếp lên đây, giờ nó đang chạy phần config

Chạy config xong đã bị lỗi này rồi
Mặc định nếu chỉ generate project mà không thêm bớt gì thì nó sẽ build kiểu mặc định, tức là thêm Python support, CUDA, TBB này nọ. Mình đoán là bạn đang để mặc định, mà mặc định thì build Python -> không tìm thấy Python -> fail. Nếu không dùng Python thì tắt đi, lúc đầu mình cũng build mặc định nhưng tắt Python thì OK:
btw, mình dùng command line, tiện hơn, nhưng GUI thì cũng y hệt.
Mình chưa kịp làm gì luôn ấy, nó đã báo lỗi rồi
Vừa chạy cmake như này xong
Bấm Finish thì nó chạy tiến trình config, xong báo lỗi như này luôn

g++ CXXFLAGS main.cpp -o main LDFLAGS
trong đó CXXFLAGS là nơi chứa thư mục include
của opencv
LDFLAGS thì 1 nùi lib ở trên với thư mục lib
của opencv
ví dụ opencv installed ở C:\opencv
thì CXXFLAGS là -IC:\opencv\include
, LDFLAGS sẽ là -LC:\opencv\lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_ccalib -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_fuzzy -lopencv_hdf -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core -lglu32 -lopengl32 -ltbb.dll
sau đó khi run main.exe
thì nó la thiếu dll nào thì vô C:\opencv\bin
mà tìm, và vô C:\mingw\bin
mà tìm rồi copy nó qua chung thư mục với main.exe
nếu thấy khổ dâm quá thì install VS2017 và vcpkg cho nó lành
Bạn chọn File -> Delete Cache
để xóa cache, nhấn Generate
rồi chọn cái thứ hai để tự tay cấp đường dẫn tới compiler (bạn chọn cái #1 bị fail vì GCC không có trong %PATH%
, mặc địch CMake sẽ search trong đó trước)
Tự điền vào đường dẫn compiler
Next, OK. Nó sẽ vẫn báo lỗi, sửa lại chỗ này và điền vào path tới make
của bạn.
Generate lại lần nữa là OK.
Vote thớt dùng VS, build mấy project cỡ bự như này mà không quen tay thì dễ khóc mướn lắm Với mấy library khủng thì toàn có cung cấp VS solution trên Windows sẵn rồi, mở ra Ctrl F5 phát là xong.
trước mình cũng dùng vs với opencv pack cho windows có sẵn
nhưng dạo gần đây mình chuyển qua code trên vsc (visual studio code) nên muốn compiler trên vsc sử dụng g++, compiler trên vsc thì cũng đơn giản thôi, sử dụng ext .runner, chỉ có là sẽ phải cấu hình lại path cho nó build (và đây là vấn đề mình đang mắc)
với lại tiện thể học cmake luôn :3
nếu xài g++ trên windows thì xài msys2 ấy, nó làm môi trường y hệt arch luôn. Có make, có pkg-config, có ls, grep, v.v… Install thư viện mới dễ dàng. gcc 7.3.0 luôn. Update toàn bộ library với 1 dòng pacman -Syu.
điểm yếu là hình như chỉ có 1 người update hơn 1000 thư viện? qt
bị xung đột vói harfbuzz chả biết làm sao, fmt
gần đây cũng bị lỗi, chán, chuyển sang vcpkg cho lành, nó build trên máy mình cả bản realease lẫn debug, debug thêm warning cực kì ngon, gcc tuổi tí.
CMake nó sẽ detect cả 3 thứ: gcc
, g++
và make
. Mà MinGW thì hầu hết là mingw32-make.exe
chứ không có make.exe
. Bác thử gõ mingw32-make.exe
thì biết :3
Bày nữa thì cũng hơi dài dòng với cũng chưa chắc giải quyết ổn nên thôi bác dùng tạm cái này, người ta có build sẵn tuy không chính thức: https://github.com/huihut/OpenCV-MinGW-Build
Hoặc nếu có cái MSYS2 thì họ có cả binaries của OpenCV trong đấy luôn, có MinGW này nọ luôn.
có câu in Rome do as the Romans do dịch sang tiếng Việt là nhập gia tùy tục, dev trên OS nào thì xài toolchain của OS đó, nếu trên Linux thì xài gcc hay clang, còn trên Windows thì cứ táng VS cho lành. Trước đây C++ trên VS chưa có package manager nào ngon nên mình mới sang thằng msys2, bây giờ có vcpkg ngon x2 lần thì ko còn lý do gì để vương vấn gcc trên Windows cả.