首页 > 解决方案 > 加载共享库时出错 在辅助依赖项上没有此类文件或目录

问题描述

我在这里检查了所有“加载共享库时出错:”问题,但没有一个对我有帮助。目前,我正在开发现有 C++ Windows 控制台应用程序的 Linux 版本。我正在使用一个名为 JTOpenToolkit 的第 3 方库。我可以编译代码并且链接器没有问题,但显然我不能让 exe 来查找 JTOpenToolkit 使用的共享库的 lib 文件夹。我的层次结构如下所示:

src/
    /VSCodeBuild
           /lib
               libJtTk107.so // library that i use
               libJt971.so
               libParaSupt971.so
               libpskernel.so
               libpsbodyshop.so
               libpsxttoolkit.so

我将链接库及其依赖项保存在 /lib 文件夹中。我的 cmake 看起来像这样:

cmake_minimum_required(VERSION 3.0.0)
project(JTTest VERSION 0.1.0)

include(CTest)
enable_testing()

set(executable_SOURCES main.cpp)

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath=$ORIGIN/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(JTPath /opt/Siemens/JTOpenToolkit/10_7/dev/lib/linux_64/)
set(JTInclude /opt/Siemens/JTOpenToolkit/10_7/dev/include)
add_executable(JTTest main.cpp)

find_library(JTLIB NAMES libJtTk107.so  REQUIRED PATHS ${JTPath})

if(NOT JTLIB)
    message([FATAL_ERROR] "JTLIB not found " ${JTPath} )
endif()

target_include_directories(JTTest PUBLIC ${JTInclude})

target_link_libraries(JTTest PRIVATE 
    ${JTLIB} 
   -lpthread
 )

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

当我检查时出现ldd,初始 rpath 设置适用于库 libJtTk107.so,但未检测到其依赖项。

linux-vdso.so.1 (0x00007fff3fb83000)
libJtTk107.so => /home/kanat/Libraries/JTTest/VSCodeBuild/./lib/libJtTk107.so (0x00007fa8c5136000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa8c50ef000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa8c4f0d000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa8c4ef2000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa8c4d00000)
libJt971.so => not found
libParaSupt971.so => not found
libpskernel.so => not found
libpsbodyshop.so => not found
libpsxttoolkit.so => not found
libeaiunicode.so => /usr/local/lib/libeaiunicode.so (0x00007fa8c4af4000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa8c49a3000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa8c5bae000)

应用程序的运行路径如下所示

RUNPATH              $ORIGIN/lib:/opt/Siemens/JTOpenToolkit/10_7/dev/lib/linux_64

我不明白我错过了什么。我想将应用程序与共享库一起发送给客户,并且不想在客户端机器上安装任何第 3 方依赖项。结果,我也无法更新LD_LIBRARY_PATH。任何想法可能是什么问题?先感谢您。

标签: c++linuxcmakeshared-libraries

解决方案


推荐阅读