Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux CMake:找不到没有绝对路径的库_Linux_Build_Cmake - Fatal编程技术网

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,它不是我想要的版本。