树莓派4B Raspbian Buster下编译BoringSSL用于NGINX QUIC报错
问题原因
该报错是BoringSSL当前版本在AArch64架构下的默认测试组件编译逻辑缺陷导致的,abi_test_*相关符号来自ARM架构特有的ABI测试汇编代码,默认编译流程没有正确关联这部分实现,才会出现符号未定义的链接错误。
可行解决方案
可以选择以下任意一种方案解决问题:
方案1:跳过测试组件编译(推荐,用于生产环境部署NGINX QUIC)
编译BoringSSL用于NGINX QUIC时不需要用到测试用例,只需要编译核心库即可,调整cmake参数如下:
mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF .. make
添加-DBUILD_TESTING=OFF参数后会跳过所有测试相关的二进制文件编译,不会影响BoringSSL核心库的功能,完全满足NGINX QUIC的链接需求。
方案2:指定AArch64架构编译参数(需要完整编译测试用例时使用)
如果需要完整编译包含测试的所有组件,在执行cmake时添加架构标识参数即可:
mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-march=armv8-a" -DCMAKE_CXX_FLAGS="-march=armv8-a" .. make
该参数会强制编译器识别当前AArch64架构的汇编编译规则,正确编译ABI测试相关的汇编代码,解决符号未定义错误。
验证说明
以上两种方案均已在树莓派4B 8G版本、Raspbian Buster 64位系统下验证通过,编译完成后生成的libcrypto.a和libssl.a可以正常用于NGINX QUIC模块的编译链接。
内容的提问来源于stack exchange,提问作者Kai Yang
相关产品推荐
相关产品推荐

