【问题标题】:Library not found on execution, after compiling using cmake使用 cmake 编译后,执行时找不到库
【发布时间】:2020-10-13 09:03:26
【问题描述】:

我在我的项目中使用 cmake。

CMakeLists.txt 代码为:

set( GS7_INCLUDE_DIRS "${EXTERNAL_PATH}/ds_sdk/SDK_GS7.0/include" CACHE PATH "SDK GS7.0 include directory" )
set( GS7_LIBRARIES "${EXTERNAL_PATH}/ds_sdk/SDK_GS7.0/lib/linux/x64/gcc49/libdsDriverGCC49.so" "${EXTERNAL_PATH}/ds_sdk/SDK_GS7.0/lib/linux/x64/gcc49/libdsUtilGCC49.so" CACHE FILEPATH "SDK GS7.0 libdsDriver full path" )
...
add_executable( FxLibLoader ... )
...
target_link_libraries( FxLibLoader
  "${GS7_LIBRARIES}"
  ...
)

当我执行cmake --build时,最终的链接命令是

c++ -g CMakeFiles/FxLibLoader.dir/FxLibLoader.cpp.o CMakeFiles/FxLibLoader.dir/FxLogger.cpp.o CMakeFiles/FxLibLoader.dir/mtoProto.pb.cc.o CMakeFiles/FxLibLoader.dir/Stats.cpp .o -o FxLibLoader -L/mnt/e/Desarrollo/sandbox_MTO/externalLibs/ds_sdk/SDK_GS7.0/lib/linux/x64/gcc49 -Wl,-rpath,/mnt/e/Desarrollo/PYMX_II/Mto/MtoApi/调试:/mnt/e/Desarrollo/sandbox_MTO/externalLibs/protobuf/protobuf-3.10.1/linux/lib/x64:/mnt/e/Desarrollo/sandbox_MTO/externalLibs/Hazelcast/linux/lib/x64:/mnt/e /Desarrollo/sandbox_MTO/externalLibs/ds_sdk/SDK_GS7.0/lib/linux/x64/gcc49 /mnt/e/Desarrollo/PYMX_II/Mto/MtoApi/debug/libMtoApi_d.so /mnt/e/Desarrollo/sandbox_MTO/externalLibs/protobuf /protobuf-3.10.1/linux/lib/x64/libprotobuf.so /usr/lib/x86_64-linux-gnu/libpython2.7.so -ldl /mnt/e/Desarrollo/sandbox_MTO/externalLibs/Hazelcast/linux/lib /x64/libHazelcastClient3.12_64.so -ldsDriverGCC49 -ldsUtilGCC49 -lstdc++fs

链接选项好的地方。编译和链接没有错误,但是当我这样做时

>ldd FxLibLoader |找到 fgrep

libdsUtilGCC49.so => 未找到

但是,libdsDriverGCC49.so库,和丢失的在同一个目录下……找到了!

如果我这样做了

LD_LIBRARY_PATH='/mnt/e/Desarrollo/sandbox_MTO/externalLibs/ds_sdk/SDK_GS7.0/lib/linux/x64/gcc49' ldd FxLibLoader |找到 fgrep

我得到空结果,所有库都位于!

  • 我做错了什么?
  • 我该如何解决?

【问题讨论】:

  • LD_LIBRARY_PATH="$(pwd)" ldd FxLibLoader | fgrep found 会输出什么? (或LD_LIBRARY_PATH=/mnt/e/Desarrollo/sandbox_MTO/externalLibs/ds_sdk/SDK_GS7.0/lib/linux/x64/gcc49 ldd ...
  • @KamilCuk LD_LIBRARY_PATH='/mnt/e/Desarrollo/sandbox_MTO/externalLibs/ds_sdk/SDK_GS7.0/lib/linux/x64/gcc49' ldd FxLibLoader | fgrep found 执行 empty 结果,所有库都已定位!

标签: linux cmake linker


【解决方案1】:

我做错了什么?

您希望链接器在/mnt/e/Desarrollo/sandbox_MTO/externalLibs/ds_sdk/SDK_GS7.0/lib/linux/x64/gcc49 目录中搜索库,而链接器不会。

我该如何解决?

指示链接器在该目录中搜索库,或将库复制到链接器已搜索的目录之一。有关更多信息,请参阅man ld。您可能想对-rpath 感兴趣。

【讨论】:

    猜你喜欢
    • 2016-10-28
    • 1970-01-01
    • 2015-06-27
    • 2023-01-10
    • 2013-07-17
    • 2020-01-06
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多