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

交叉编译libunwind时缺失共享库的问题求助

问题

尝试使用以下命令将libunwind交叉编译至aarch64架构:

./configure --prefix=/home/test/libunwind/arm_build --libdir=/home/test/libunwind/arm_build/lib --target=aarch64 --host=x86_64 CC=/home/gcc-10.3/bin/aarch64-none-linux-gnu-gcc CXX=arm-none-linux-gnu-g++ LDFLAGS="-L$PWD/src/.libs" --enable-shared=yes

但编译后仅生成静态库及头文件,目录结构如下:

~/libunwind » tree arm_build                                                                                                                    
arm_build
├── include
│   ├── libunwind-aarch64.h
│   ├── libunwind-common.h
│   ├── libunwind-coredump.h
│   ├── libunwind-dynamic.h
│   ├── libunwind-ptrace.h
│   └── libunwind-x86.h
└── lib
    ├── libunwind-aarch64.a
    ├── libunwind-aarch64.la
    ├── libunwind-x86.a
    ├── libunwind-x86.la
    └── pkgconfig
        ├── libunwind-coredump.pc
        ├── libunwind-generic.pc
        └── libunwind-ptrace.pc

3 directories, 13 files

而在原生x86架构编译时(命令为./configure --prefix=/home/test/libunwind/x86_build ),能正常生成共享库,目录结构片段如下:

~/libunwind » tree x86_build                                                                                                                    
x86_build                                                                                                                                                                         
├── include                                                                                                                                                                       
│   ├── libunwind-common.h                                                                                                                                                        
│   ├── libunwind-coredump.h                                                                                                                                                      
│   ├── libunwind-dynamic.h                                                                                                                                                       
│   ├── libunwind.h                                                                                                                                                               
│   ├── libunwind-ptrace.h                                                                                                                                                        
│   ├── libunwind-x86_64.h                                                                                                                                                        
│   └── unwind.h                                                                                                                                                                  
└── lib       
    ├── libunwind.a                                                                                                                                                               
    ├── libunwind-coredump.a
    ├── libunwind-coredump.la
    ├── libunwind-coredump.so -> libunwind-coredump.so.0.0.0
    ├── libunwind-coredump.so.0 -> libunwind-coredump.so.0.0.0
    ├── libunwind-coredump.so.0.0.0
    ├── libunwind-generic.a -> libunwind-x86_64.a
    ├── libunwind-generic.so -> libunwind-x86_64.so
    ├── libunwind.la
    ├── libunwind-ptrace.a
    ├── libunwind-ptrace.la
    ├── libunwind-ptrace.so -> libunwind-ptrace.so.0.0.0
    ├── libunwind-ptrace.so.0 -> libunwind-ptrace.so.0.0.0
    ├── libunwind-ptrace.so.0.0.0
    ├── libunwind-setjmp.a
    ├── libunwind-setjmp.la
    ├── libunwind-setjmp.so -> libunwind-setjmp.so.0.0.0
    ├── libunwind-setjmp.so.0 -> libunwind-setjmp.so.0.0.0
    ├── libunwind-setjmp.so.0.0.0
    ├── libunwind.so -> libunwind.so.8.0.1
...                

请问有什么方法可以在交叉编译时强制生成共享库?

解决方法
  • 修复工具链参数不匹配:配置命令中CC使用的是aarch64架构编译器,但CXX用的是arm架构的arm-none-linux-gnu-g++,两者架构不匹配会导致链接异常。将CXX替换为对应aarch64版本的编译器,比如/home/gcc-10.3/bin/aarch64-none-linux-gnu-g++。
  • 修正交叉编译架构参数:交叉编译时,--host应设置为目标架构,原命令中--host=x86_64错误,会让configure认为是编译x86_64版本的库。修改为--host=aarch64-none-linux-gnu,--target参数可省略或设为相同值。
  • 移除干扰性LDFLAGS:配置阶段添加的LDFLAGS="-L$PWD/src/.libs"可能干扰交叉编译的链接路径,建议先移除该参数,确认共享库正常生成后再按需添加。
  • 强制仅生成共享库:在configure命令中添加--disable-static,配合--enable-shared=yes,强制跳过静态库编译,只生成共享库。
  • 清理后重新编译:先执行make clean删除旧编译产物,再删除arm_build目录和config.cache文件,用修正后的命令重新执行configure && make && make install。
  • 升级libunwind版本:部分旧版本libunwind对aarch64交叉编译的共享库支持不完善,建议升级到最新稳定版本后再尝试编译。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:40:46