settingsLogin | Registersettings
리눅스 관련 모든 질문답변을 올려주세요! 100% 무료입니다! -Ask Ubuntu KR
Show Menu

pkg-config 라이브러리 설정관련

2 좋아요 0 싫어요
리눅스에서 opencv (영상처리 라이브러리)를 사용하여

컴파일을 하기 위해서 pkg-config를 사용하고

opencv에서 제공하는 opencv.pc 파일을 이용하여

컴파일시 라이브러리 옵션 및 CFLAG 옵션을 지정하고 있습니다.

opencv.pc 파일은 아래와 같습니다.

===============================================

# Package Information for pkg-config

prefix=/usr/local
exec_prefix=${prefix}
libdir=
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 2.4.2
Libs:  ${exec_prefix}/lib/libopencv_contrib.a ${exec_prefix}/lib/libopencv_legacy.a ${exec_prefix}/lib/libopencv_ml.a ${exec_prefix}/lib/libopencv_stitching.a ${exec_prefix}/lib/libopencv_nonfree.a ${exec_prefix}/lib/libopencv_objdetect.a ${exec_prefix}/lib/libopencv_ts.a ${exec_prefix}/lib/libopencv_videostab.a ${exec_prefix}/lib/libopencv_calib3d.a ${exec_prefix}/lib/libopencv_photo.a ${exec_prefix}/lib/libopencv_video.a ${exec_prefix}/lib/libopencv_features2d.a ${exec_prefix}/lib/libopencv_highgui.a ${exec_prefix}/lib/libopencv_flann.a ${exec_prefix}/lib/libopencv_imgproc.a ${exec_prefix}/lib/libopencv_core.a /lib64/libbz2.so swscale avutil avformat avcodec v4l1 gthread-2.0 freetype fontconfig glib-2.0 gobject-2.0 pango-1.0 pangoft2-1.0 gio-2.0 gdk_pixbuf-2.0 cairo atk-1.0 pangocairo-1.0 gdk-x11-2.0 gtk-x11-2.0 /lib64/libIlmThread.so /lib64/libHalf.so /lib64/libIex.so /lib64/libIlmImf.so /lib64/libImath.so /lib64/libjasper.so /lib64/libtiff.so /lib64/libpng.so /lib64/libjpeg.so rt pthread m dl stdc++ /lib64/libz.so
Cflags: -I${includedir_old} -I${includedir_new}

===============================================

여기서 라이브러리 옵션을 보면 대부분 절대경로로 라이브러리 파일이 지정되어 있는데

swscale avutil avformat avcodec v4l1 gthread-2.0 freetype fontconfig glib-2.0 gobject-2.0 pango-1.0 pangoft2-1.0 gio-2.0 gdk_pixbuf-2.0 cairo atk-1.0 pangocairo-1.0 gdk-x11-2.0 gtk-x11-2.0

위 부분은 그냥 라이브러리 이름만 입력이 되어 있고

컴파일 할 때 위 라이브러리를 찾을 수 없다고 나옵니다.

그래서 find 명령으로 libswscale.so 파일을 검색해보니 /usr/lib 에 존재하고 있어서

~/.bashrc 에 LD_LIBRARY_PATH=/usr/lib 를 추가해주고 source ~/.bashrc 후 다시 컴파일 하여도

마찬가지로 위 라이브러리를 찾을 수 없다는 오류가 나와서

표준 라이브러리 로드 옵션을 각각의 이름 앞에 붙이니 오류 없이 컴파일이 되었습니다. 아래처럼요..

-l swscale -l avutil -l avformat -l avcodec ...

이처럼 모든 이름 앞에 -l 을 붙여야 하나요?

맨 앞에 한번만 붙여봤는데 바로 뒤에 따라오는 라이브러리 말고는 적용이 안되는것 같더라구요.

라이브러리 패스 지정이 잘못된건가요?

아니면 표준 라이브러리를 좀 더 간단하게 지정해 줄 수 있는건가요? (하나하나 -l 붙이는 방법 외에..)
문의 2016 1월 4 개발 이동규
  

1 답변

0 좋아요 0 싫어요
pkg-config --cflags --libs opencv 하시면 됩니다.
답변됨 2016 1월 7 hodong
pkg-config 사용법을 모르는게 아니구요
--libs opencv 를 사용했을 때 opencv.pc에 있는 내용이 컴파일 옵션에 추가되는데
표준 라이브러리 앞에 -l 이 붙어있지 않아서 일일이 다 붙여줘야 하는가 하는게  요점입니다. -l을 붙여주지 않으면 라이브러리를 몾찾는다는 에러가 나거든요.

관련 질문

1 좋아함 0 싫어요
1 답변
0 좋아요 0 싫어요
0 답변
0 좋아요 0 싫어요
0 답변
0 좋아요 0 싫어요
0 답변
Hosting by Microsoft MeltingPot/maru intermet
...