关联Matplot++与Libtorch导致程序内存损坏问题求助
问题
我编写了一个最小示例程序,仅在链接Torch库时触发崩溃。已确保自身程序、Torch、Matplot三个组件的GLIBCXX_USE_CXX11_ABI均设为0,运行环境为Ubuntu、g、C++17。运行程序时抛出错误:
corrupted size vs. prev_size
Aborted (core dumped)
相关文件如下:
File CMakeLists.txt
cmake_minimum_required(VERSION 4.0) set(PROJECT visualization) project(${PROJECT}) set(SOURCES VisualizationMain.cpp) add_executable(${PROJECT} ${SOURCES}) find_package(Matplot++ REQUIRED) set(CMAKE_CUDA_ARCHITECTURES "native") find_package(Torch REQUIRED) target_link_libraries(${PROJECT} "${TORCH_LIBRARIES}" Matplot++::matplot)
File VisualizationMain.cpp
#include <matplot/matplot.h> int main() { using namespace matplot; auto fig = figure(true); return 0; }
解决方法
统一编译标准与ABI全局设置:在CMakeLists.txt的
project(${PROJECT})之后、find_package之前添加以下配置,确保所有编译单元强制使用C++17和ABI=0:set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_compile_definitions(GLIBCXX_USE_CXX11_ABI=0)调整链接顺序:将Matplot++的链接项放在Torch之前,避免符号优先级冲突导致的内存损坏:
target_link_libraries(${PROJECT} Matplot++::matplot "${TORCH_LIBRARIES}")验证Torch的ABI兼容性:部分预编译Torch包可能默认使用ABI=1编译,即使手动定义宏也无法覆盖。这种情况下需要从源码编译Torch,编译时指定
GLIBCXX_USE_CXX11_ABI=0,确保和Matplot++的ABI完全匹配。禁用不必要的CUDA模块:如果程序不需要CUDA支持,在
find_package(Torch)前添加set(CMAKE_CUDA_COMPILER OFF),减少CUDA相关组件引入的ABI冲突风险。
内容的提问来源于stack exchange,提问作者mzw
相关产品推荐
相关产品推荐

