首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用该库进行共享库和测试应用程序的项目。

使用该库进行共享库和测试应用程序的项目。
EN

Stack Overflow用户
提问于 2016-03-08 21:47:16
回答 1查看 43关注 0票数 0

我用CMake (2.8)构建了一个共享库和一个测试应用程序。

现在,在make install之后,我得到了这样一棵树:

代码语言:javascript
复制
root/
  lib/
    mylib.so
  samples/
    test1
    test2
    ...

现在当我运行我的test应用程序时,它找不到要运行的共享库文件:

代码语言:javascript
复制
error while loading shared libraries: mylib.so: cannot open shared object file: No such file or directory

我怎么才能解决这个问题?

编辑

这是我的CMakeLists.txt的相关部分

对于mylib

代码语言:javascript
复制
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)

对于可执行文件文件夹:

代码语言:javascript
复制
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 )
EN

回答 1

Stack Overflow用户

发布于 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中的软件而安装的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35878664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档