【问题标题】:CMake linking error at runtime from other lib in subdirectoryCMake在运行时从子目录中的其他库链接错误
【发布时间】:2020-09-25 15:10:16
【问题描述】:

我正在尝试运行一个使用动态 openCASCADE 库的项目。 所以首先我使用以下 CMake 文件设置了一个最小的测试项目:

...    
include_directories(/home/user/occt/build_r/include/opencascade/)   

add_executable(testOCCT
    main.cpp
    step2stl.cpp
)

find_package(OpenCASCADE REQUIRED NO_DEFAULT_PATH) 

set(OCCT_LIBS TKMesh; TKSTEP; TKSTL; TKXSBase; TKernel)
target_link_libraries(testOCCT ${OCCT_LIBS})

这是正常工作的。

现在我想将相同的库链接到另一个在更大项目中使用的库。 项目有3个CMake文件,1个项目,2个子目录,1个可执行文件,1个myLib,由add_subdirectory()添加。

在我添加的子目录之一的 myLib 的 CMake 文件中:

...
include_directories(/home/user/occt/build_r/include/opencascade/)
...
add_library(${MY_LIB_NAME} SHARED ${my_sources})

find_package(OpenCASCADE REQUIRED NO_DEFAULT_PATH)

set(OCCT_LIBS TKMesh; TKSTEP; TKSTL; TKXSBase; TKernel)
target_link_libraries(${MY_LIB_NAME} ${OCCT_LIBS})

所以与测试项目中的基本相同。 但是现在我得到一个错误(在运行时):

symbol lookup error: myLib.so: undefined symbol: _ZN24BRepMesh_IncrementalMeshC1ERK12TopoDS_Shapedbdb

【问题讨论】:

  • 您检查过that question 是否有类似的错误消息?您是否为您的应用程序和库检查了 ldd 的输出?
  • @Tsyvarev 应用程序和 lib 的 ldd 输出看起来都不错: libTKSTEP.so.7 => /usr/local/lib/libTKSTEP.so.7 (0x00007f694816e000) libTKSTEPattr.so.7 => /usr/local/lib/libTKSTEPattr.so.7 (0x00007f6948068000) libTKSTEP209.so.7 => /usr/local/lib/libTKSTEP209.so.7 (0x00007f6947fc3000) .... 并添加 --no-按需标志也没有帮助:

标签: cmake linker subdirectory


【解决方案1】:

好的,所以我自己发现了问题。它不起作用的原因不是因为 CMake,而是在数据包管理器上安装了一些其他版本的库,然后加载而不是正确的。

清除这些库解决了问题。

但是我仍然不明白为什么它在测试项目上加载了正确的库版本而在另一个上加载了错误(都在同一台机器上测试)

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多