2014-11-24 7 views
0

이 작업은 정상적으로 작동합니다.CMake : 절대 경로가없는 라이브러리를 찾을 수 없습니다.

add_executable(my_exe file.c) 
target_link_libraries(my_exe /lib64/libldap_r-2.4.so.2) 

하지만 왜 작동하지 않습니까?

link_directories(/lib64) 
add_executable(my_exe file.c) 
target_link_libraries(my_exe ldap_r-2.4) 

오류 메시지 :

/usr/bin/ld: cannot find -lldap_r-2.4 

디렉토리/lib64에 다음과 같은 파일이 포함

libldap_r-2.4.so.2 -> libldap_r-2.4.so.2.5.6 
libldap_r-2.4.so.2.5.6 

답변

0

수동으로 연결보다 FIND_LIBRARY을 사용하는 것이 좋습니다.

라이브러리가 기본 설치되어있는 경우 버전을 포함 할 필요가 없습니다.

target_link_libraries(my_exe ldap_r) 
+0

가. find_library (LDAP_LIB 이름 ldap_r HINTS/lib64) 및 메시지 ("LDAP LIBRARY $ {LDAP_LIB}")는 다음과 같은 결과를 출력합니다. LDAP LIBRARY LDAP_LIB-NOTFOUND./lib64에는 libldap_r-2.4.so.2와 libldap_r-2.4.so.2.5.6이 포함되어 있습니다. – user1766169

0

/lib64 폴더가 링커 검색 경로에없는 것 같습니다. LD_LIBRARY_PATH를 내보내 다음과 같이 포함 해보십시오. 이 작업은 cmake를 호출하려는 쉘과 동일한 쉘에서 수행해야합니다.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib64/ 

또한,이 작동하지 않습니다

target_link_libraries(my_exe ldap_r-2.4) 

을 그 CMake는 당신/lib64에 디렉토리에 있지 않은 libldap_r-2.4.so를 찾을 수 있기 때문이다. 당신이 심볼릭 링크를 생성 괜찮다면 :

ln -s /lib64/libldap_r-2.4.so.2.5.6 /lib64/libldap_r-2.4.so 

그러나, 크리스티안 Bidea 말했듯이, 그것은 FIND_LIBRARY 유틸리티를 사용하는 것이 좋습니다. 당신이 이름 ldap_r-2.4를 사용하여 연결을 시도 할 때

+0

$ LD_LIBRARY_PATH를 echo하면 ":/usr/local/lib"가 표시되고 "/ usr/local/lib "로 변경하십시오. LD_LIBRARY_PATH에/lib64를 추가하려고 시도했지만 FIND_LIBRARY가 여전히 라이브러리를 찾을 수 없습니다. @ balajeerc – user1766169

1

, 링커가 앞에 추가 lib와 파일을 검색하며, 기본 접미사 .a, .so처럼, 추가, 그래서 당신이 이름을 가진 파일이 있다면 그것은 작동합니다 사용 된 링크 디렉토리 중 하나에서 libldap_r-2.4.so (버전 번호가있는 파일의 심볼릭 링크 일 수 있음) (/lib64이 시스템의 기본 검색 경로에 포함되어있을 가능성이 큽니다. 따라서 수동으로 추가 할 필요가 없습니다). 우분투 14.10에 나를 위해

libldap_r.so라는 심볼릭 링크, libldap_r-2.4.so.2.8.3를 가리키는, 그래서 것이 라이브러리와 링크하는 올바른 방법이있다 :이 작동하지 않습니다

target_link_libraries(my_exe ldap_r) 
+0

설명 주셔서 감사합니다! libldap_r.so가 있지만, 원하는 버전이 아닌 libldap_r-2.3.so.0.2.15를 가리키고 있습니다. – user1766169

관련 문제