Могут ли библиотеки, созданные в нескольких версиях Android ndk, работать вместе?

#android-ndk

#android-ndk

Вопрос:

Я работаю над проектом Android C , который требует от меня создания новой общей библиотеки и вызова этой библиотеки из существующего кода. Существующий код использует довольно старую версию ndk. Я подумываю об использовании последней версии ndk для создания моей общей библиотеки. Я думаю, что до тех пор, пока API и ABI совпадают, интеграция должна работать нормально.

Интересно, видите ли вы какие-либо проблемы с этим подходом.

Как существующий, так и новый код используют stl. Я думаю, что просто свяжу свой код со статическими библиотеками stl, чтобы избежать любых конфликтов во время выполнения. Как вы думаете, это сработает? С уважением.

Ответ №1:

Я заметил только проблему, когда в разных собственных частях (готовых библиотеках и библиотеках проектов) использовалась разная связь STL. Готовые библиотеки были скомпилированы с использованием static STL library , но использовались библиотеки проекта shared STL library , и поэтому иногда код работал странно (в моем случае это была проблема с использованием std::fstream , и std::locale::facet из-за глобальных переменных шаблонных классов были установлены дважды).

Ответ №2:

Обычно они работают, но это совершенно непроверенная конфигурация, и поломки ABI случаются.

Если это вариант, вы всегда должны соответствовать своим версиям NDK.