01/10/2018, 14:18

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.

viết 16:24 ngày 01/10/2018

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

Florastamine viết 16:34 ngày 01/10/2018

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

viết 16:33 ngày 01/10/2018
$ 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

HelloWorld viết 16:19 ngày 01/10/2018

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ỉ

HelloWorld viết 16:23 ngày 01/10/2018

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

Florastamine viết 16:22 ngày 01/10/2018

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

Tao Không Ngu. viết 16:27 ngày 01/10/2018

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.

HelloWorld viết 16:31 ngày 01/10/2018

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

Florastamine viết 16:18 ngày 01/10/2018

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.

HelloWorld viết 16:19 ngày 01/10/2018

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

viết 16:24 ngày 01/10/2018
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

Florastamine viết 16:21 ngày 01/10/2018

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.

Florastamine viết 16:28 ngày 01/10/2018

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.

HelloWorld viết 16:29 ngày 01/10/2018

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

HelloWorld viết 16:26 ngày 01/10/2018

(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)

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

viết 16:31 ngày 01/10/2018

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

Florastamine viết 16:25 ngày 01/10/2018

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.

viết 16:25 ngày 01/10/2018

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

Bài liên quan
0