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

ARM64架构下IPOPT交叉编译报错及兼容性问询

IPOPT ARM64交叉编译问题解决方案及支持确认

问题描述

不清楚IPOPT是否支持ARM64架构的交叉编译,在Ubuntu18.04环境下使用aarch64-linux-gnu编译器尝试交叉编译IPOPT时出现错误。目前已成功交叉编译blas、lapack、coinhsl、coinasl和mumps库(file命令显示为aarch64架构),编译IPOPT时的错误信息如下:

make[2]: 进入目录“/home/gzy/casadicompile/Ipopt-releases-3.13.0/build/src/Apps/AmplSolver”
  CXX      ampl_ipopt.o
  CXX      AmplTNLP.lo
  CXXLD    libipoptamplinterface.la
libtool: warning: '/home/gzy/casadicompile/arm64compiler/aarch64-linux-gnu-master/bin/../lib/gcc/aarch64-linux-gnu/13.0.0/../../../../aarch64-linux-gnu/lib/../lib64/libstdc++.la' seems to be moved
libtool: warning: library '/home/gzy/casadicompile/arm64compiler/aarch64-linux-gnu-master/bin/../lib/gcc/aarch64-linux-gnu/13.0.0/../../../../aarch64-linux-gnu/lib/../lib64/libstdc++.la' was moved.
  CXXLD    ipopt
libtool: warning: library '/home/gzy/casadicompile/arm64compiler/aarch64-linux-gnu-master/bin/../lib/gcc/aarch64-linux-gnu/13.0.0/../../../../aarch64-linux-gnu/lib/../lib64/libstdc++.la' was moved.
libtool: warning: library '/home/gzy/casadicompile/arm64compiler/aarch64-linux-gnu-master/bin/../lib/gcc/aarch64-linux-gnu/13.0.0/../../../../aarch64-linux-gnu/lib/../lib64/libstdc++.la' was moved.
/home/gzy/casadicompile/arm64compiler/aarch64-linux-gnu-master/bin/../lib/gcc/aarch64-linux-gnu/13.0.0/../../../../aarch64-linux-gnu/bin/ld: /home/gzy/casadicompile/arm64compiler/aarch64-linux-gnu-master/bin/../lib/gcc/aarch64-linux-gnu/13.0.0/../../../../aarch64-linux-gnu/lib/../lib64/libstdc++.so: undefined reference to `fstat64@GLIBC_2.33'
/home/gzy/casadicompile/arm64compiler/aarch64-linux-gnu-master/bin/../lib/gcc/aarch64-linux-gnu/13.0.0/../../../../aarch64-linux-gnu/bin/ld: /home/gzy/casadicompile/arm64compiler/aarch64-linux-gnu-master/bin/../lib/gcc/aarch64-linux-gnu/13.0.0/../../../../aarch64-linux-gnu/lib/../lib64/libstdc++.so: undefined reference to `pthread_key_create@GLIBC_2.34'

解决方案及支持确认

1. IPOPT对ARM64架构的支持情况

IPOPT完全支持ARM64(aarch64)架构的交叉编译,社区存在大量成功实践案例,官方文档未限制该架构的编译。当前错误并非IPOPT本身的架构兼容性问题,而是工具链与系统GLIBC版本不匹配导致的链接错误。

2. 链接错误的具体解决步骤

错误根源:使用的aarch64-linux-gnu GCC 13.0.0依赖的GLIBC版本(2.33/2.34)远高于Ubuntu 18.04默认的GLIBC 2.27,导致链接时无法找到高版本GLIBC符号。

  • 更换匹配系统的交叉编译工具链
    弃用高版本自定义工具链,改用Ubuntu 18.04仓库提供的适配版本:

    sudo apt update
    sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
    

    该工具链的GCC版本为7.x,依赖的GLIBC版本与Ubuntu 18.04完全匹配,可避免符号缺失问题。

  • 重新配置并编译IPOPT
    清理原有build目录,重新运行configure指定新工具链及ARM64依赖库:

    rm -rf build && mkdir build && cd build
    ../configure --host=aarch64-linux-gnu \
      --with-blas=/path/to/your/arm64/blas \
      --with-lapack=/path/to/your/arm64/lapack \
      --with-hsl=/path/to/your/arm64/coinhsl \
      --with-mumps=/path/to/your/arm64/mumps
    make -j$(nproc)
    

    注意将上述路径替换为你实际编译好的ARM64依赖库路径。

  • 消除libstdc++.la移动警告(可选)
    该警告由工具链路径变动导致libtool无法定位.la文件,不影响编译结果。若要消除,可在configure时添加--disable-libtool-lock参数,或重新生成工具链的libstdc++.la文件。

内容的提问来源于stack exchange,提问作者郭中一

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:52