Связывание двух библиотек, созданных с помощью c ++ _ static - PullRequest
0 голосов
/ 28 августа 2018

На следующей веб-странице

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

утверждает, что наличие двух библиотек (libA.so, libB.so), скомпилированных с c++_static, нарушает правило одного определения, в котором для функций c ++ в разных библиотеках будет определено несколько символов. В этом случае поведение будет неопределенным, при этом может возникнуть несколько ошибок.

Однако я не знаю, происходит ли это и в следующем сценарии:

  • Я компилирую libA.a связанный agsint c++_static
  • Затем я компилирую libB.so и связываюсь с c++_static и libA.a

В таком случае проблема не возникнет, и было бы безопасно связать разделяемую библиотеку со статической библиотекой, я прав? Или символы из libc++ встроены в libA.a?

1 Ответ

0 голосов
/ 28 августа 2018

Это безопасно. Фактически, ни libA.a, ни libB.a не будут связаны с libc++. Статические библиотеки не связаны с их зависимостями - это делается при связывании исполняемых файлов / общих объектов, которые используют эти библиотеки.

Единственный код из libc++, который окажется в этих двух статических библиотеках, будет (встроенным) кодом из заголовков. Это не проблема.

...