这项工作很好。
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 :(得分:1)
当您尝试使用名称ldap_r-2.4
进行链接时,链接器将搜索前缀为lib
的文件,并附加默认后缀,例如.a
,{ {1}},如果你在其中一个链接目录中有一个名为.so
的文件(可能是带有版本号的文件的符号链接),它会起作用(libldap_r-2.4.so
是最有可能包含在系统的默认搜索路径中,因此无需手动添加它。
对我来说,在ubuntu 14.10上只有一个名为/lib64
的符号链接,指向libldap_r.so
,所以链接到这个库的正确方法是:
libldap_r-2.4.so.2.8.3
答案 1 :(得分:0)
答案 2 :(得分:0)
/ 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实用程序。