簡體   English   中英

CMake:沒有絕對路徑就找不到庫

[英]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)

與手動鏈接相比,使用FIND_LIBRARY更好。

如果您的庫是默認安裝的,則不必包含該版本。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM