【问题标题】:Linking two libraries built with c++_static链接使用 c++_static 构建的两个库
【发布时间】:2025-12-24 17:40:12
【问题描述】:

在以下网页中,

https://developer.android.com/ndk/guides/cpp-support

它指出使用c++_static 编译的两个库(libA.so、libB.so)打破了单一定义规则,其中将为不同库中的 c++ 函数定义多个符号。这种情况是未定义的行为,可能会出现多个错误。

但是,我不知道以下情况是否也会发生这种情况:

  • 我编译libA.a链接agsint c++_static
  • 然后我编译 libB.so 并链接到 c++_staticlibA.a

在这种情况下,问题不会发生,将共享库链接到静态库是安全的,我正确吗?或者libc++中的符号是否嵌入在libA.a中?

【问题讨论】:

    标签: android c++ android-ndk static-linking libc++


    【解决方案1】:

    这是安全的。事实上,libA.alibB.a 都不会链接到 libc++。静态库不与它们的依赖关系链接 - 这是在链接使用这些库的可执行文件/共享对象时完成的。

    libc++ 中唯一会出现在这两个静态库中的代码将是来自标头的(内联)代码。这不是问题。

    【讨论】:

    • 是的,出于某种原因,我认为静态链接 libc++ 与其他库有点不同。很高兴知道这一点,谢谢!