我关注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
我明白了:
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf529b000)
linux-gate.so.1 => (0xf777a000)
/lib/ld-linux.so.2 (0xf777b000)
lib1.so => /path/to/libs/lib1.so (0xf56a2000)
lib2.so => /path/to/libs/lib2.so (0xf548f000)
我的问题是:
locate linux-gate.so.1
什么都没有。为什么3.没有=>符号? (找到答案here)答案 0 :(得分:4)
好的找到答案:
set( CMAKE_SKIP_BUILD_RPATH true )
这样做了。
答案 1 :(得分:0)
您是否遇到实际问题,或者您只是对ldd
的输出感到困惑?回答您的问题:如果您在Linux上成功编译并链接了库,则将存储外部库的完整路径。如果您现在复制或安装(使用CMake)库,则将剥离完整的库路径。现在,您必须确保LD_LIBRARY_PATH
提供了正确的路径,或者外部库位于您的库所在的同一文件夹中。