2013-07-25 2 views
3

를 사용하여 링크 라이브러리
파일 /usr/lib/gstreamer-0.10/libgstffmpeg.so이 CMakeLists.txtfind_library 또는 link_directory 또는 find_package? 더 좋은 방법은 무엇입니까? 오류 - 감안할 때 cmake

에 존재
만들기 변경

접근 1find_library()

find_library (GST_FFMPEG 명칭 gstffmpeg 된 경로는/usr/lib/gstreamer-0.10 /)
...
target_link_libraries (MyLibraryOrMyExe cutable $ {GST_FFMPEG})

나는 위의 구성 (방법 1)와 make을 실행 , 내가받을 다음과 같은 오류

/빈/LD : 경고 : libvpx.so.1, /usr/lib/i386-linux-gnu/libavcodec.so.53에서 필요하지 않음 (-rpath 또는 -rpath-link를 사용해보십시오)
/bin/ld : 경고 : libschroedinger-1.0.so.0 /usr/lib/i386-linux-gnu/libavcodec.so.53에 필요하지 않습니다 (-rpath 또는 -rpath-link를 사용해보십시오)
/bin/ld : 경고 : libgsm.so.1 /usr/lib/i386-linux-gnu/libavcodec.so.53에 필요없는이 없습니다 (-rpath 또는 -rpath-link를 사용하십시오)

추가 된 라이브러리가 링크되지 않은 다른 라이브러리에 의존하는 것처럼 보입니다!/usr/lib에 3 .so 이상의 파일이 있습니다. 따라서 1에 접근하는 가능한 해결책은 find_library() 함수를 세 개 더 추가하는 것입니다. 권리 ? This question이 가능한 솔루션

  • Q1 이상에서 발견 된 문제를 탐구 임니다

    이 될 수 있습니다. 종속 라이브러리를 찾아 링크하는 노력을 아끼지 않는 다른 방법이 있습니까? 모든 의존 라이브러리가 자동으로 링크되는 접근법은 무엇입니까?

접근법 2link_directories()

link_directories (/usr/lib/gstreamer-0.10/)
target_link_libraries (MyLibraryOrMyExecutable gstffmpeg)

나는 위의 구성으로 make를 실행 (접근 2), 다음 오류가 발생합니다.

/LD

빈은 : -lgstffmpeg

  • Q2를 찾을 수 없습니다. 위의 방법 2로 문제를 해결하는 방법은 무엇입니까?
  • Q3. 어느 접근법 1 또는 2가 더 낫습니까?

P. cmake에 대한 문서를 읽으려고했지만 SO에서 검색했지만 내 문제를 해결할 수 없습니다. 나는 두 가지 방법을 시도하고 그들이

답변

1

먼저 Q3에 대답하기 위해, 내가 선호하는 방법은 link_directories에 대한 문서에서 접근 1.

생각 모두 문제가 :

참고이 명령은 그 거의 필요하지 않습니다. find_package() 및 find_library()가 반환하는 라이브러리 위치는 절대 경로입니다. 이 절대 라이브러리 파일 경로를 target_link_libraries() 명령에 직접 전달하십시오. CMake는 링커가 그것들을 찾도록 할 것입니다.

당신이 취하는 접근 방식에 관계없이 나는이 "하위 종속성"목록을 자동으로 얻고 추가하는 쉬운 방법을 모른다. 나는 각각 find_package 또는 find_library을 할 것입니다.

최소한 의존성을 찾지 못하면 링크 시간이 아닌 CMake 구성 시간에 프로젝트가 실패합니다. 나는 비슷한 시나리오가 발생

0

, 나는 find_library()가이 명령을 추가하기 직전, CMakesList.txt에 추가하여 해결 :

세트를 (CMAKE_PREFIX_PATH /은/경로// 당신의/lib 디렉토리에 /)

이지만 일반적으로 종속성 라이브러리가 usr/lib 또는 usr/local/lib 경로에있는 경우 함수라고도 불리우며 찾을 수 있습니다.