Связывание двух библиотек, созданных с помощью C++_static

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

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

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

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам