Làm thế nào để compiler chương trình có dùng thư viện opencv trên cmd sử dụng g++?

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.

Vô cái thư viện opencv tìm pkconfig rồi fang

1 Like

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 :smiley:

2 Likes
$ 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

2 Likes

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ỉ :smile:

anh nói rõ chi tiết được không ạ

Ủa, mặc định CMake hỗ trợ generate hầu hết targets mà :joy: 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.

1 Like

Hi Nấm Lùn.
Có 3 cách dùng code thư viện.

  1. 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.
  2. Thư viện tính libxxx.a nó là một file nén các file xxx.o
  3. 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.

1 Like

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.

1 Like

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

1 Like

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.

1 Like

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 :joy: 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.

1 Like

:smile: 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

Mình có thêm path vào system mà, có thể build chương trình c/c++ bình thường từ cmd

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í.

2 Likes

CMake nó sẽ detect cả 3 thứ: gcc, g++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.

1 Like

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ả.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?