线程 1 "my_app" 收到信号 SIGSEGV,从另一个库访问 API 时出现分段错误

Thread 1 "my_app" received signal SIGSEGV, Segmentation fault when accessing API from another library

从我使用 G++ 编译的 C++ 应用程序 my_app,我从另一个共享库 tool.so(tool.so 也使用 C++ 开发)调用了几个 API。来自 tool.so 的 API 调用的每个引用我从 GDB 得到以下分段错误。

Thread 1 "my_app" received signal SIGSEGV, Segmentation fault.
0x00007ffff61406cd in boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code\*) () from /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.65.1

问题似乎是 boost 版本不匹配。 myapp 需要 boost 1.65 但 tool.so 使用 boost 1.55 编译。我静态链接两者并得到分段错误。我修改了 CmakeList.txt,使其动态链接 my_app 工具。但我仍然遇到相同的分段错误。有什么建议吗?

CmakeLists.txt add_library(工具共享导入) set_target_properties(工具属性 IMPORTED_LOCATION ${TOOL_LIB_DIR}/tool.so) target_link_libraries(my_app 私人工具)

Thread 1 "my_app" received signal SIGSEGV, Segmentation fault.
0x00007ffff61406cd in boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code\*) () from /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.65.1
    int main(int argc, const char* argv[])
    {
    ..  
    if(TOOL_Initialize() == TOOL_FAIL)    ----> Call 1 
    {
      std::cout <<" failed to initialize.\n";
    } 
    ..
    ..
    ..
    
    if(TOOL_DEVICE_GetCount(DEVICE_TYPE)!= TOOL_SUCCESS)--> call 2
    { 
     cout << "Get CPU count API failed exiting" << endl ; 
    }
}    

在调用 1 中出现分段错误,如果注释掉调用 1 然后在调用 lib 调用的任何地方进入调用 2

它通过添加这个选项起作用, target_link_options(my_app PUBLIC "LINKER:/home/fkamalmu/toollib_1_7_8/lib/linux/tool.so") 而不是下面的方式 链接 add_library(工具共享导入)

set_target_properties(工具属性 IMPORTED_LOCATION ${TOOL_LIB_DIR}/tool.so)

target_link_libraries(my_app 私有工具)