我正在尝试创建一个使用纯“C”(libSetupConfig.so)编写的动态库,另一个使用“C ++”(libUserAnalysis.so),这样第二个使用第一个的功能。该项目使用CMake构建。
完整的来源是: release notes
编译运行正常。输出在这里: https://github.com/evovch/Useful/tree/master/go4_5H_processor
尝试使用该库时,我收到类似的运行时错误: go4analysis:符号查找错误:... / build / src / libUserAnalysis.so:未定义符号:_Z18InitStcSetupConfigP17_stc_setup_config
https://github.com/evovch/Useful/blob/master/go4_5H_processor/compile.txt
所以,我检查符号是否存在于:
nm libSetupConfig.so
...
0000000000001140 T InitStcSetupConfig
...
https://github.com/evovch/Useful/blob/master/go4_5H_processor/err.txt
老实说,我不知道如何解释完整的符号字符串_Z18InitStcSetupConfigP17_stc_setup_config
我的顶级CMakeLists.txt包含以下几行:
add_subdirectory(src)
add_subdirectory(setupconfig)
src下的CMakeLists.txt,对应于libUserAnalysis.so,包含:
add_library(UserAnalysis SHARED ${SOURCE_LIB})
target_link_libraries(UserAnalysis Go4Analysis)
target_link_libraries(UserAnalysis SetupConfig)
setupconfig下的CMakeLists.txt对应libSetupConfig.so包含:
add_library(SetupConfig SHARED ${SOURCE_LIB})
add_executable(setup_config_test ${SOURCE_EXE})
target_link_libraries(setup_config_test SetupConfig)
由此我假设libUserAnalysis.so将链接到libSetupConfig.so
我还检查在编译libUserAnalysis.so时是否链接了libSetupConfig.so库;看到最后一行 https://github.com/evovch/Useful/blob/master/go4_5H_processor/auxiliary/nm_output.txt 必要的标志-L和-l在那里 -L / home / evovch / soft / go4-5.3.0_fairsoftroot / lib -Wl,-rpath,/ home / evovch / soft / FairSoft_install / lib / root:/home/evovch/soft/go4-5.3.0_fairsoftroot/lib: / home / evovch / Documents / Useful / go4_5H_processor / build / setupconfig -lGo4Analysis ../ setupconfig / libSetupConfig.so
PS。我知道问题很可能不是来自语言不同的事实。