You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关联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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:14:52