opencv 어플리케이션을 빌드가 필요한 상황이고,
빌드 스크립트 내에선 pkg-config 를 사용하고 있다.
g++ pablo_uvc_uart_server.cpp pablo_uvc_uart_command.cpp pablo_uvc_opencv_control.cpp \
-o uart_server -lpthread `pkg-config --cflags --libs opencv4`
opencv 라이브러리가 설치되어 있지 않으므로 빌드가 실패한다.
opencv4.pc 파일이라는 걸 찾아야 하는듯 하다.
root@user-virtual-machine:/home/user/pablo_uart_code# make
g++ pablo_uvc_uart_server.cpp pablo_uvc_uart_command.cpp pablo_uvc_opencv_control.c pp -o uart_server -lpthread `pkg-config --cflags --libs opencv4`
Package opencv4 was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv4.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv4' found
pablo_uvc_opencv_control.cpp:5:10: fatal error: opencv2/opencv.hpp: No such file or directory
5 | #include <opencv2/opencv.hpp>
| ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:4: pablo_uvc_uart_server] Error 1
root@user-virtual-machine:/home/user/pablo_uart_code#
pkg-config 의 컨셉과 opencv 빌드구성에 필요한 생각을 만들고, 정보를 정리한다.
라이브러리를 사용해서 바이너리를 빌드할때,
pkg-config 를 사용해서, 빌드에 필요한 cflags 와 링커옵션들 (libs) 을 받아오는 경우가 있다.
이때 pkg-config 는 정해진 search path 내에 있는 .pc 파일에서 정보를 확인한다고 한다.
그 중 하나가 /usr/lib/pkg-config/ 이다.
### man pkg-config
ENVIRONMENT VARIABLES
PKG_CONFIG_PATH
A colon-separated (on Windows, semicolon-separated) list of directories to
search for .pc files. The default directory will always be searched after
searching the path; the default is libdir/pkgconfig:datadir/pkgconfig where lib‐
dir is the libdir for pkg-config and datadir is the datadir for pkg-config when
it was installed.
확인해보았으나, opencv pc 파일은 확인되지 않는다.
root@user-virtual-machine:/usr/lib/pkgconfig# ls
aspnetwebstack.pc mono-2.pc monosgen-2.pc system.web.mvc3.pc
cecil.pc mono-cairo.pc nunit.pc system.web.mvc.pc
dotnet35.pc mono-lineeditor.pc reactive.pc wcf.pc
dotnet.pc mono-nunit.pc system.web.extensions_1.0.pc xbuild12.pc
ibus-table.pc mono-options.pc system.web.extensions.design_1.0.pc
libgdiplus.pc mono.pc system.web.mvc2.pc
root@user-virtual-machine:/usr/lib/pkgconfig#
root@user-virtual-machine:/usr/lib/pkgconfig# find . -name "opencv*"
root@user-virtual-machine:/usr/lib/pkgconfig#
그럼 먼저 opencv2/opencv.hpp 헤더를 제공하는 패키지 부터 설치해본다.
root@user-virtual-machine:/home/user/pablo_uart_code# apt-file search opencv2/opencv.hpp
libopencv-core-dev: /usr/include/opencv4/opencv2/opencv.hpp
root@user-virtual-machine:/home/user/pablo_uart_code# apt-get install libopencv-core-dev
이후 다시 빌드를 해보았으나, 빌드시 pkg-config 는 opencv 정보를 확인하지 못했다.
혹시나 해서 좀더 검색해보니, .pc 파일도 검색을 할수 있다는 정보를 획득했다.
https://stackoverflow.com/a/21524027/20746475
--> libopencv-dev 를 설치해야 한다는 걸 알았다.
root@user-virtual-machine:/home/user/pablo_uart_code# apt-file search opencv4.pc
libopencv-dev: /usr/lib/x86_64-linux-gnu/pkgconfig/opencv4.pc
root@user-virtual-machine:/home/user/pablo_uart_code#
root@user-virtual-machine:/home/user/pablo_uart_code# apt-get install libopencv-dev
설치 후 확인해보니 .pc 파일이 내가 예상했던 곳 (/usr/lib/pkg-config) 이 아니라
/usr/lib/x86_64-linux-gnu/pkgconfig/opencv4.pc 에 위치해 있었다.
root@user-virtual-machine:/usr/lib# find . -name "opencv*"
./x86_64-linux-gnu/cmake/opencv4
./x86_64-linux-gnu/pkgconfig/opencv4.pc
root@user-virtual-machine:/usr/lib#
chatgpt 에게 물어보니, pkg-config 가 .pc 파일 검색에 사용하는 pc_path 를
확인하는 명령은 아래와 같다고 한다.
root@user-virtual-machine:/usr/lib# pkg-config --variable pc_path pkg-config
/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
root@user-virtual-machine:/usr/lib#
내가 본 경로 (/usr/lib/x86_64-linux-gnu/pkgconfig) 외에도 여러 경로가 쓰이고 있는걸
직접 확인할수 있었다.
root@user-virtual-machine:/home/user/pablo_uart_code# make
g++ pablo_uvc_uart_server.cpp pablo_uvc_uart_command.cpp pablo_uvc_opencv_control.cpp -o uart_server -lpthread `pkg-config --cflags --libs opencv4`
root@user-virtual-machine:/home/user/pablo_uart_code#
gstreamer 설치 명령
https://gstreamer.freedesktop.org/documentation/installing/on-linux.html?gi-language=c