Связывание двух библиотек, созданных с помощью 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++
в итоге эти две статические библиотеки будут (встроенными) кодом из заголовков. Это не проблема.