链接两个使用c ++ _ static

时间:2018-08-28 15:39:57

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

在以下网页中,

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中?

1 个答案:

答案 0 :(得分:3)

这很安全。实际上,libA.alibB.a都不会与libc++链接。静态库未针对它们的依赖关系进行链接-当链接使用这些库的可执行文件/共享对象时,将完成此操作。

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