在不使用完整路径的情况下创建共享库链接

cmake link to shared libraries without using full path

本文关键字:创建 情况下 共享 链接 路径      更新时间:2023-10-16

我有以下CMakeLists.txt:

set( PROJECT_LINK_LIBS lib1.so lib2.so )
link_directories( path/to/libs ) # lib1.so and lib2.so are there.
add_library( ${PROJECT_NAME} SHARED ${PROJECT_SOURCES} )
target_link_libraries( ${PROJECT_NAME} ${PROJECT_LINK_LIBS} )

编译和链接都很好

但是当我这样做的时候:

ldd -d mylib.so

:

  1. libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf529b000)
  2. linux-gate.so.1 => (0xf777a000)
  3. /lib/ld-linux.so.2 (0xf777b000)
  4. lib1.so => /path/to/libs/lib1.so (0xf56a2000)
  5. lib2.so => /path/to/libs/lib2.so (0xf548f000)

我的问题是:

  • 如何删除/path/to/libs/和5。与LD_LIBRARY_PATH有关?
  • 自动回答:我得到什么意思1。搜索lib .so。在那条路上。但是2呢?和3。?locate linux-gate.so.1没有给出。为什么3。没有=>符号?(在这里找到答案)

Ok找到答案了:

set( CMAKE_SKIP_BUILD_RPATH true )

你有一个实际的问题,还是你只是混淆了ldd的输出?回答您的问题:如果您在Linux上成功编译并链接了库,那么将存储到外部库的完整路径。如果你现在复制或安装(使用CMake)你的库,完整的库路径将被剥离。现在,您必须确保LD_LIBRARY_PATH提供了正确的路径,或者外部库位于与库所在的文件夹中。

相关文章: