cmake链接到共享库而不使用完整路径

时间:2014-07-25 15:13:47

标签: c++ linux linker cmake

我关注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)
  6. 我的问题是:

    • 如何删除/ path / to / libs / for 4和5.?与LD_LIBRARY_PATH有什么关系?
    • 自动回答:我明白了1.在该路径中搜索libc.so.6。但是2.和3.怎么样? locate linux-gate.so.1什么都没有。为什么3.没有=>符号? (找到答案here

2 个答案:

答案 0 :(得分:4)

好的找到答案:

set( CMAKE_SKIP_BUILD_RPATH true )

这样做了。

答案 1 :(得分:0)

您是否遇到实际问题,或者您只是对ldd的输出感到困惑?回答您的问题:如果您在Linux上成功编译并链接了库,则将存储外部库的完整路径。如果您现在复制或安装(使用CMake)库,则将剥离完整的库路径。现在,您必须确保LD_LIBRARY_PATH提供了正确的路径,或者外部库位于您的库所在的同一文件夹中。