Linux CMake:找不到没有绝对路径的库
这工作做得很好Linux CMake:找不到没有绝对路径的库,linux,build,cmake,Linux,Build,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
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
使用它比手动链接更好
如果默认安装了库,则不必包含版本
target_link_libraries(my_exe ldap_r)
/lib64文件夹可能不在链接器搜索路径中。 请尝试导出LD_LIBRARY_路径以包含此路径,如下所示。这必须在要从中调用cmake的同一个shell中完成
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib64/
此外,这不起作用:
target_link_libraries(my_exe ldap_r-2.4 )
因为这使CMake查找libldap_r-2.4.so,它不在/lib64目录中。如果您不介意创建符号链接:
ln -s /lib64/libldap_r-2.4.so.2.5.6 /lib64/libldap_r-2.4.so
然而,正如克里斯蒂安·拜达所说,最好使用FIND_库实用程序 当您尝试使用名称
ldap\u r-2.4
进行链接时,链接器将搜索前面带有lib
的文件,并附加默认后缀,如.a
,,.so
,因此,如果您有一个名称为libldap\u r-2.4的文件,则链接器将工作。因此
(可能是具有版本号的文件的符号链接)位于使用的链接目录之一(/lib64
很可能包含在系统的默认搜索路径中,因此不必手动添加)
对我来说,在ubuntu 14.10上只有一个名为libldap\u r.so
的符号链接,指向libldap\u r-2.4.so.2.8.3
,因此与此库链接的正确方法是:
target_link_libraries(my_exe ldap_r)
这不起作用。find_library(LDAP_LIB名称LDAP_r HINTS/lib64)和message(“LDAP library${LDAP_LIB}”)会导致以下输出LDAP library LDAP_LIB-NOTFOUND./lib64包含libldap_r-2.4.so.2和libldap_r-2.4.so.2.5.6(如果我回显$LD_library_路径):/usr/local/LIB”我链接到了不在“/usr/local/lib”中的其他库。我尝试将/lib64添加到LD_LIBRARY_路径,但FIND_LIBRARY仍然找不到该库。@Balajeerc感谢您的解释!有一个libldap_r.so,但它指向的是libldap_r-2.3.so.0.2.15,它不是我想要的版本。