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

Android Native构建配置疑问:静态库与共享库互用是否可行及问题

Android Native构建配置场景疑问解答

场景1:静态库通过LOCAL_SHARED_LIBRARIES引用静态库(注:你标注的场景描述是“在共享库中使用静态库”,但代码示例里B为静态库)

是否允许?

这种配置不被允许,属于构建规则误用,会直接导致构建失败。

存在的问题:

  • 链接阶段报错:LOCAL_SHARED_LIBRARIES是用来声明对共享库的依赖,构建系统会尝试查找libA.so,但A被编译为静态库(生成libA.a),找不到对应文件会抛出链接错误。
  • 配置逻辑错误:如果你的真实需求是共享库依赖静态库(比如B是共享库,要打包静态库A的代码),正确配置应该是将B的include $(BUILD_STATIC_LIBRARY)改为include $(BUILD_SHARED_LIBRARY),同时把LOCAL_SHARED_LIBRARIES := A替换为LOCAL_STATIC_LIBRARIES := A,这种配置是合法的,静态库的代码会被合并到共享库B中。

场景2:静态库通过LOCAL_STATIC_LIBRARIES引用共享库

是否允许?

这种配置同样不被允许,违反ndk-build的依赖规则,构建会失败。

存在的问题:

  • 链接阶段报错:LOCAL_STATIC_LIBRARIES用于声明对静态库的依赖,构建系统会尝试查找libA.a,但A是共享库(生成libA.so),无法找到目标文件导致报错。
  • 静态库的本质限制:静态库只是目标文件的集合,本身不会进行动态链接,无法将共享库的代码嵌入到静态库中。如果静态库B需要使用共享库A的功能,正确做法是在B中用LOCAL_SHARED_LIBRARIES := A声明依赖,此时B本身不会链接A,但当最终的可执行文件或共享库依赖B时,会自动带上对A的依赖,在运行时加载libA.so。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:40:27