链接两个使用 c++ 构建的库_static

Linking two libraries built with c++_static

本文关键字:构建 c++ static 两个 链接      更新时间:2023-10-16

在下面的网页中,

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

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

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

  • 我编译libA.a链接的agsintc++_static
  • 然后我编译libB.so并针对c++_staticlibA.a进行链接

在这种情况下,问题就不会发生,并且将共享库与静态库链接是安全的,我说得对吗?还是libc++中的符号嵌入libA.a

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

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