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

Windows平台编译BoringSSL x64时遇链接错误求助

问题

在Windows平台编译BoringSSL时,x32版本可正常构建,但在CMake的C/C++编译选项中添加-m64编译x64版本时,出现链接错误,缺失两个符号:fiat_p256_adx_sqr和fiat_p256_adx_mul。

错误信息如下:

ld.lld: error: undefined symbol: fiat_p256_adx_sqr

libcrypto.a(bcm.c.obj):(fiat_p256_square)

ld.lld: error: undefined symbol: fiat_p256_adx_mul

libcrypto.a(bcm.c.obj):(fiat_p256_mul)

查看代码后发现,这两个缺失的符号定义在如下条件判断块内:

#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && (defined(__APPLE__) || defined(__ELF__))
...
#endif

由于Windows平台既不是__APPLE__也不是__ELF__,所以对应的汇编代码(.S文件)不会被编译,导致链接时找不到符号。请问是否遗漏了配置,还是BoringSSL在Windows下必须添加-DOPENSSL_NO_ASM才能支持?

回答

BoringSSL在Windows x64平台下编译时,确实会遇到这个问题——因为x64版本的Fiat P-256汇编优化代码仅针对ELF(类Linux系统)和Apple平台做了适配,Windows的PE格式不在当前的编译条件范围内,所以对应的fiat_p256_adx_sqr和fiat_p256_adx_mul符号不会被编译出来。

解决方法有两种:

  • 禁用汇编优化:在CMake配置时添加-DOPENSSL_NO_ASM=ON,这样BoringSSL会自动回退到纯C实现的P-256运算逻辑,避免链接错误。这是最直接的解决方案,适合不需要极致性能的场景。
  • 适配Windows汇编编译:如果需要保留汇编优化,需要修改BoringSSL的编译条件,在判断中加入Windows平台的宏(比如_WIN64),同时确保汇编代码能被Windows的汇编器(比如ML64)正确处理。不过这种方法需要修改BoringSSL的源码,并且要验证汇编代码的兼容性,适合有一定底层开发经验的用户。

一般来说,推荐第一种方法,即添加-DOPENSSL_NO_ASM=ON来快速解决链接问题,除非你对性能有极高要求,否则纯C实现已经足够满足大多数场景的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:30:16