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

在OS X系统下使用Mingw无法正确链接OpenSSL库

解决RSA代码交叉编译时的OpenSSL链接错误

咱们先拆解你遇到的核心问题:你用x86_64-w64-mingw32-g++交叉编译Windows目标程序,但链接的是本地macOS的OpenSSL库(/usr/local/opt/openssl/是Homebrew在macOS上的默认路径)——跨平台的库文件不兼容,这就导致链接器找不到针对Windows平台的BIO函数实现,自然报出undefined reference错误。

下面给你几个可行的解决步骤:

1. 安装针对mingw的交叉编译版OpenSSL

首先得替换掉本地的macOS版OpenSSL,安装适配x86_64-w64-mingw32的交叉编译版本。在macOS上可以通过Homebrew直接安装:

brew install mingw-w64-openssl

安装完成后,它的默认路径是/usr/local/opt/mingw-w64-openssl/,里面包含完全适配Windows目标的头文件和库文件。

2. 调整编译脚本的路径与链接顺序

把原来的build.sh里的路径替换成交叉编译版OpenSSL的路径,同时注意库的链接顺序(依赖库要放在被依赖代码的后面,-lssl依赖-lcrypto,所以要把-lssl放在-lcrypto前面):

x86_64-w64-mingw32-g++ rsa.cpp -L/usr/local/opt/mingw-w64-openssl/lib -lssl -lcrypto -I/usr/local/opt/mingw-w64-openssl/include -static-libstdc++ -static-libgcc -o main.exe

3. 验证库的兼容性(可选)

如果还是报错,可以先确认一下你链接的库是不是真的适配Windows目标:

file /usr/local/opt/mingw-w64-openssl/lib/libcrypto.a

正常输出应该包含x86_64-w64-mingw32相关标识,说明这是适配交叉编译目标的库文件。

额外提示:完全静态编译(可选)

如果你想把OpenSSL库也打包进exe,实现完全静态编译,可以加上-static参数(前提是交叉编译版OpenSSL是静态编译的版本):

x86_64-w64-mingw32-g++ rsa.cpp -L/usr/local/opt/mingw-w64-openssl/lib -lssl -lcrypto -I/usr/local/opt/mingw-w64-openssl/include -static-libstdc++ -static-libgcc -static -o main.exe

补充说明:你报错里的BIO_new_mem_buf和BIO_f_base64都是OpenSSL crypto库的核心函数,只要正确链接针对Windows平台的libcrypto库,就能解决这些未定义引用问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:03