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

Ubuntu交叉编译libcmaes生成Windows exe遇链接错误求助

解决Ubuntu交叉编译libcmaes生成Windows .exe的链接错误问题

首先,你遇到的核心问题是链接的libcmaes库不是针对Windows交叉编译的——本地用g++编译的库是Linux ELF格式,而x86_64-w64-mingw32-g++需要Windows PE格式的库,因此会出现未定义引用错误。以下是具体解决步骤:

1. 交叉编译libcmaes库

你需要先针对Windows平台重新编译libcmaes,而不是直接使用Ubuntu下编译好的版本:

# 克隆libcmaes源码(如果还没下载)
git clone https://github.com/beniz/libcmaes.git
cd libcmaes
# 创建交叉编译专用的构建目录
mkdir build-mingw && cd build-mingw
# 用cmake配置交叉编译环境
cmake .. \
  -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
  -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \
  -DCMAKE_SYSTEM_NAME=Windows \
  -DBUILD_SHARED_LIBS=OFF  # 选择静态库(避免Windows上需要额外的dll),如果需要动态库改为ON
# 编译并安装库
make -j$(nproc)
sudo make install

安装完成后,库文件会被放到/usr/x86_64-w64-mingw32/lib,头文件在/usr/x86_64-w64-mingw32/include(默认路径)。

2. 编译你的测试代码

现在用交叉编译器编译你的代码,并链接刚编译好的Windows版libcmaes库:

x86_64-w64-mingw32-g++ -o test.exe test.cpp -I/usr/x86_64-w64-mingw32/include -L/usr/x86_64-w64-mingw32/lib -lcmaes

如果你自定义了安装路径,替换-I和-L后的路径即可。

3. 额外检查点

  • 确保libcmaes编译时启用了模板实例化:有些C++库需要显式实例化模板才能被交叉编译器链接到。如果仍有错误,可以在cmake配置时添加-DENABLE_TEMPLATE_INSTANCES=ON(libcmaes的cmake选项支持这个)。
  • 测试运行:编译生成的test.exe可以用wine test.exe在Ubuntu中测试,或者复制到Windows系统直接运行(如果用动态库,需要把对应的libcmaes.dll一起复制过去)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:28:15