如何解决BitBake编译do-client时ERR_reason_error_string未定义引用错误
问题原因
该报错属于链接阶段依赖缺失:ERR_reason_error_string是OpenSSL的libcrypto库导出的符号,当前编译配置没有将libcrypto加入链接参数,导致符号找不到。
解决方法
修改你的deliveryoptimization-agent_git.bb配方即可,具体改动如下:
- 首先在
DEPENDS变量中添加openssl依赖,确保Yocto在编译前将OpenSSL的头文件、库文件部署到对应sysroot目录 - 新增链接参数,将
-lcrypto传入链接器
改后配方核心片段参考
LICENSE = "CLOSED" DO_SRC_URI ?= "gitsm://github.com/microsoft/do-client;branch=main" SRC_URI = "${DO_SRC_URI}" SRCREV = "cd2eaadc0755c93bb31234a19a4577aced9845e5" python () { src_uri = d.getVar('DO_SRC_URI') if src_uri.startswith('git'): d.setVar('PV', '1.0+git' + d.getVar('SRCPV')) d.setVar('S', d.getVar('WORKDIR') + "/git") elif src_uri.startswith('file'): d.setVar('S', d.getVar('WORKDIR') + "/do-client") } # 新增openssl依赖 DEPENDS = "boost cpprest libproxy msft-gsl openssl" inherit cmake BUILD_TYPE ?= "Debug" EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=${BUILD_TYPE}" EXTRA_OECMAKE += "-DDO_BUILD_TESTS=OFF" EXTRA_OECMAKE += "-DDO_INCLUDE_AGENT=ON" EXTRA_OECMAKE += "-Dcpprestsdk_DIR=${WORKDIR}/recipe-sysroot/usr/lib/cmake" # 新增链接参数 TARGET_LDFLAGS += "-lcrypto" BBCLASSEXTEND = "native nativesdk"
备用方案
如果上述方法不生效(部分CMake工程会忽略全局LDFLAGS),可以将新增的TARGET_LDFLAGS行替换为通过CMake参数传递链接选项:
EXTRA_OECMAKE += "-DCMAKE_EXE_LINKER_FLAGS:STRING=-lcrypto"
修改后重新执行编译即可解决该链接错误。
内容的提问来源于stack exchange,提问作者Eugen Meissner
相关产品推荐
相关产品推荐

