Linux 使用共享库的项目和使用该库的测试应用程序
我用CMake(2.8)构建了一个共享库和一个测试应用程序 现在,在Linux 使用共享库的项目和使用该库的测试应用程序,linux,cmake,Linux,Cmake,我用CMake(2.8)构建了一个共享库和一个测试应用程序 现在,在makeinstall之后,我得到了如下树: root/ lib/ mylib.so samples/ test1 test2 ... 现在,当我运行我的test应用程序时,它找不到要运行的共享库文件: error while loading shared libraries: mylib.so: cannot open shared object file: No such file
makeinstall
之后,我得到了如下树:
root/
lib/
mylib.so
samples/
test1
test2
...
现在,当我运行我的test
应用程序时,它找不到要运行的共享库文件:
error while loading shared libraries: mylib.so: cannot open shared object file: No such file or directory
我怎样才能解决这个问题
编辑
以下是我的CMakeLists.txt的相关部分
对于mylib
add_library(mylib SHARED ${LIB_SOURCES})
target_link_libraries(mylib ${VTK_LIBRARIES} ${OpenCV_LIBS})
install(TARGETS mylib DESTINATION lib)
install(FILES include/mylib.h DESTINATION include)
install(DIRECTORY models DESTINATION .)
add_subdirectory(samples)
对于可执行文件文件夹:
file(GLOB APP_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
foreach( samplesourcefile ${APP_SOURCES} )
string( REPLACE ".cpp" "" samplename ${samplesourcefile} )
add_executable( ${samplename} ${samplesourcefile} )
target_link_libraries( ${samplename} mylib )
install(TARGETS ${samplename} DESTINATION samples)
endforeach( samplesourcefile )
这可能是因为库安装在Linux操作系统的非默认目录中。 文件/etc/ld.so.conf包含动态加载程序用于在Linux中搜索共享库的目录,请参阅
ldconfig
manpage。
您始终可以使用命令ldd
检查是否找到动态链接可执行文件(如测试应用程序)的所有共享依赖项
因此,解决缺少库问题的方法是将库安装在系统用作查找共享库的搜索路径的目录下。
在Linux发行版中安装开发共享库的合适位置是/usr/local/lib
;在所有Linux中,默认情况下,这几乎肯定是作为共享库的搜索路径包含的。同样,像测试应用程序这样的开发二进制文件最好放在/usr/local/bin
下(但是,在其他地方使用它并不是缺少lib问题的原因)
以下是关于/usr/local
的摘录,记录如下:
[…]它复制了'/usr'的结构。现在,“/usr/local”是
被广泛认为是保持健康的好地方
自编或第三方程序。/usr/local层次结构用于
在本地安装软件时由系统管理员使用。信息技术
需要确保系统软件运行时不会被覆盖
更新。它可用于可共享的程序和数据
在一组主机中,但未在/usr中找到。本地安装
软件必须放在/usr/local而不是/usr中,除非
正在安装以替换或升级/usr中的软件
你能展示一下你的CMakeLists.txt的相关部分吗?@heteperfan done:)我不确定我是否正确。但是
target\u link\u库(${samplename}mylib)
不属于foreach循环。你只需要链接一次。因此,我会尝试将其从循环中排除,但我不确定这是否解决了您的问题。我认为安装线也是如此。