Windows10 64位编译ed25519-donna遇OpenSSL链接错误求助
解决Windows 10 64位下MinGW编译ed25519-donna的链接错误
我来帮你拆解这两个常见的MinGW编译错误,一步步解决问题:
1. 搞定undefined reference to RAND_bytes错误
这个报错确实是因为没正确链接OpenSSL的crypto库,但你加-lssl -lcrypto没效果,大概率是这几个原因:
- 链接参数顺序错了:GCC链接器是按从左到右的顺序处理文件的,库参数必须放在源文件/目标文件之后。比如你之前可能写了
gcc -lssl -lcrypto ed25519.c,这会让链接器先处理库,此时还没看到需要这些符号的ed25519代码,自然找不到。正确顺序应该是:gcc ed25519.c -o ed25519 -lssl -lcrypto。 - 32/64位不匹配:你的路径里显示用的是
mingw32(32位MinGW),但系统是64位的。如果你装的OpenSSL是64位版本,就会出现链接失败。要么换成32位的OpenSSL,要么改用64位的MinGW-w64编译器(更推荐后者,适配你的64位系统)。 - OpenSSL库路径没指定:如果MinGW找不到OpenSSL的库文件,得用
-L参数手动指定库所在路径,比如:gcc ed25519.c -o ed25519 -L"C:/path/to/openssl/lib" -lssl -lcrypto。
2. 解决undefined reference to WinMain@16错误
这个错误是因为MinGW默认会尝试链接Windows GUI程序的入口WinMain,但ed25519-donna是控制台程序,入口是标准的main函数。解决办法很简单:
- 编译时加上
-mconsole选项,明确告诉编译器生成控制台程序,比如:gcc ed25519.c -o ed25519 -mconsole -lssl -lcrypto。 - 另外检查下你自己写的测试代码(如果有的话),确保主函数是
int main(int argc, char *argv[])这种标准形式,别写错了入口。
完整编译命令示例
假设你用的是适配64位系统的MinGW-w64,且OpenSSL已经正确安装并能被编译器找到,完整的编译命令应该是:
x86_64-w64-mingw32-gcc ed25519.c -o ed25519.exe -mconsole -lssl -lcrypto
如果是编译整个ed25519-donna项目,建议修改项目的Makefile,把-mconsole和正确的OpenSSL链接参数加进去,同时注意库的顺序要放在源文件之后。
内容的提问来源于stack exchange,提问作者Ilya Gazman
相关产品推荐
相关产品推荐

