树莓派4构建Amazon Kinesis Video Producer SDK遇阻求助
在树莓派4上构建Amazon Kinesis Video Streams Producer SDK的解决方案
问题背景
在树莓派4(Debian Bookworm 32/64位,ARMv8架构)上编译Amazon Kinesis Video Streams Producer C/C++ SDK时,执行make阶段触发OpenSSL汇编指令错误,报错信息如下:
crypto/aes/vpaes-armv8.S:1191: Error: bad instruction `ldp d10,d11,[sp],#16' crypto/aes/vpaes-armv8.S:1192: Error: bad instruction `ldp d8,d9,[sp],#16' crypto/aes/vpaes-armv8.S:1193: Error: bad instruction `ldp x29,x30,[sp],#16' crypto/aes/vpaes-armv8.S:1195: Error: bad instruction `ret' make[4]: *** [Makefile:833: crypto/aes/vpaes-armv8.o] Error 1 make[3]: *** [Makefile:174: all] Error 2 gmake[2]: *** [CMakeFiles/project_libopenssl.dir/build.make:87: build/src/project_libopenssl-stamp/project_libopenssl-build] Error 2 gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/project_libopenssl.dir/all] Error 2 gmake: *** [Makefile:91: all] Error 2 CMake Error at CMake/Utilities.cmake:75 (message): CMake step for libopenssl failed: 2 Call Stack (most recent call first): CMakeLists.txt:142 (build_dependency)
错误原因
SDK默认编译自带的OpenSSL子模块时,自动启用了树莓派4 ARMv8环境不兼容的AES指令集优化,导致汇编指令无法被编译器正确解析。
解决方法
方法1:使用系统预装的OpenSSL替代SDK自带子模块
这是最简便的方案,直接依赖系统已安装的OpenSSL库:
- 安装系统OpenSSL开发包:
sudo apt-get update && sudo apt-get install libssl-dev - 清空之前的build目录(如果有),重新执行cmake并指定使用系统OpenSSL:
mkdir -p build && cd build cmake -DBUILD_GSTREAMER_PLUGIN=ON -DUSE_SYSTEM_OPENSSL=ON .. - 执行编译和安装:
make -j$(nproc) sudo make install
方法2:修改SDK配置,禁用OpenSSL的ARMv8 AES优化
如果必须使用SDK自带的OpenSSL,可通过修改CMake配置禁用相关优化:
- 进入SDK根目录,打开
CMake/Utilities.cmake文件,找到构建libopenssl的代码段(通常在build_dependency函数中)。 - 在编译OpenSSL的CMAKE_ARGS中添加
-DOPENSSL_NO_ARMV8_AES=ON,或者修改OpenSSL的Configure命令,添加no-asm参数:
例如,将原Configure命令修改为:./Configure linux-armv8 no-asm # 64位系统 # 或 ./Configure linux-armv4 no-asm # 32位系统 - 清空build目录,重新执行cmake和make:
rm -rf build && mkdir build && cd build cmake -DBUILD_GSTREAMER_PLUGIN=ON .. make -j$(nproc) sudo make install
验证
编译完成后,可通过GStreamer插件测试推流功能:
gst-launch-1.0 v4l2src ! videoconvert ! x264enc ! kvssink stream-name="your-stream-name" access-key="your-access-key" secret-key="your-secret-key"
若能正常启动并推流,说明SDK构建成功。
内容的提问来源于stack exchange,提问作者Hatprob
相关产品推荐
相关产品推荐

