我用CMake (2.8)构建了一个共享库和一个测试应用程序。
现在,在make install之后,我得到了这样一棵树:
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 )发布于 2016-03-10 02:43:53
这可能是因为您的库安装在Linux操作系统中的一个非默认目录中。Linux文件/etc/ld.so.conf包含动态加载器用于在Linux中搜索共享库的目录,请参阅ldconfig手册。您可以始终检查是否使用命令ldd找到像测试应用程序这样的动态链接可执行文件的所有共享依赖项。
因此,解决您缺少的库问题的一个方法是将您的库安装在您的系统用作查找共享库的搜索路径的目录下。在Linux发行版中安装开发共享库的适当位置是/usr/local/lib;几乎可以肯定,在所有Linuxes中,这都是作为共享库的搜索路径而包含的。同样,像您的测试应用程序这样的开发二进制文件最好放在/usr/local/bin下面(但是在其他地方使用它并不是缺少库问题的原因)。
为了记录在案,下面是一段关于/usr/local的摘录,由Linux文档项目记录
..。它复制了'/usr‘的结构。如今,'/usr/local‘被广泛认为是保存自编或第三方程序的好地方。/usr/local层次结构供系统管理员在本地安装软件时使用。当系统软件被更新时,它需要避免被覆盖。它可以用于可在一组主机之间共享但在/usr中找不到的程序和数据。本地安装的软件必须放在/usr/local而不是/usr中,除非是为了替换或升级/usr中的软件而安装的。
https://stackoverflow.com/questions/35878664
复制相似问题