【发布时间】: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