线程 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 私有工具)
从我使用 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 私有工具)