使用CMake构建Android库时遭遇Ssl依赖缺失错误及解决方法
CMake构建Android库时出现'Ssl-NOTFOUND'依赖错误的原因与修复
问题场景
你在使用Gradle和CMake构建Android库、引入OpenSSL依赖时编写了如下CMake代码:
add_library(Ssl STATIC IMPORTED) set_target_properties(Crypto PROPERTIES IMPORTED_LOCATION /Users/user/dev/android_openssl/static/lib/${ANDROID_ABI}/lib/libssl.a)
构建时抛出错误:
ninja: error: 'Ssl-NOTFOUND', needed by 'lib/libmylib.so', missing and no known rule to make it
查看build.ninja发现依赖显示为Ssl-NOTFOUND,但libssl.a的路径是正确的,这是为什么?
问题根源
这个错误完全是目标名称不匹配导致的配置遗漏:
你通过add_library声明了一个名为Ssl的静态导入库,但后续调用set_target_properties时,错误地把IMPORTED_LOCATION属性赋值给了一个名为Crypto的目标——而这个Crypto目标在当前CMake脚本里根本没定义过。
CMake找不到Ssl目标对应的导入路径配置,就会将其标记为Ssl-NOTFOUND,最终导致Ninja构建失败。
修复后的代码
只需要把set_target_properties的目标参数改成和add_library定义的Ssl一致即可:
add_library(Ssl STATIC IMPORTED) set_target_properties(Ssl PROPERTIES IMPORTED_LOCATION /Users/user/dev/android_openssl/static/lib/${ANDROID_ABI}/lib/libssl.a)
这样CMake就能正确关联Ssl目标与对应的静态库文件,构建流程就能正常执行了。
内容的提问来源于stack exchange,提问作者Juan Garcia
相关产品推荐
相关产品推荐

