CMake:无法找到没有绝对路径的库
这工作正常。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
/lib64文件夹可能不在您的链接器搜索路径中。 尝试导出LD_LIBRARY_PATH以包含此内容,如下所示。这必须在你要调用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
然而,正如克里斯蒂安Bidea所说,这是更好地运用FIND_LIBRARY实用。
如果我回显$ LD_LIBRARY_PATH,它显示“:/ usr/local/lib”,并且我链接到不在“/ usr/USR/local/lib目录”。我尝试将/ lib64添加到LD_LIBRARY_PATH,但FIND_LIBRARY仍然找不到该库。 @balajeerc – user1766169 2014-11-28 13:16:53
当你试图使用名称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)
感谢您的解释!有一个libldap_r.so,但它指向libldap_r-2.3.so.0.2.15,它不是我想要的版本。 – user1766169 2014-12-05 06:33:12
这是行不通的。 find_library(LDAP_LIB NAMES 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 2014-11-26 14:00:20