[英]CMake: Cannot find library without absolute path
這項工作很好。
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
當您嘗試使用名稱ldap_r-2.4
進行鏈接時,鏈接器將搜索帶有lib
前綴的文件,並附加默認后綴,如.a
, .so
,因此,如果您使用的文件名為使用的鏈接目錄之一中的libldap_r-2.4.so
(可能是帶有版本號的文件的符號鏈接)( /lib64
最有可能包含在系統的默認搜索路徑中,因此不必手動添加)。
對我來說,在ubuntu 14.10上只有一個名為libldap_r.so
的符號鏈接,指向libldap_r-2.4.so.2.8.3
,因此與該庫鏈接的正確方法是:
target_link_libraries(my_exe ldap_r)
/ lib64文件夾可能不在鏈接器搜索路徑中。 嘗試導出LD_LIBRARY_PATH以包括以下內容。 這必須在您要從其調用cmake的同一shell中完成。
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
但是,正如Cristian Bidea所說,最好使用FIND_LIBRARY實用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.