Я пытаюсь построить проект на основе двух библиотек с открытым исходным кодом. Я использую библиотеки OpenCV и ceres. Libopencv_java3.so - это выпуск OpenCV3.1.2 с веб-сайта github, который включает OpenCV-3.1.0- android -sdk. Libceres.so скомпилирован из кода souce самостоятельно.
Когда я собираю свое приложение, NDK-build генерирует следующую информацию:
clang ++. Exe: warning: аргумент не используется во время компиляции: '-nostdlib ++' [-Wunused-command-line -argument]
ошибка: неопределенная ссылка на 'cv :: imwrite (cv :: String const &, cv :: _ InputArray const &, std :: __ ndk1 :: vector> const &)'
После поиска в Google я нахожу один связанный пост
Ошибка Неопределенная ссылка на 'std :: __ ndk1 :: locale :: ~ locale ()' В ответе говорится, что используются разные реализации STL .
В моем случае libopencv_ java .so может использовать gnustl_stati c, а libceres использует c ++ _ stati c. Я не понимаю причину. Обе реализации представляют собой библиотеки stati c, и конфликт не должен возникать.
- Все ли файлы из выпуска opencv скомпилированы с помощью gnustl_stati c?
- Почему __ndk1 появляется в std :: vector?
- Для одного большого проекта разные инженеры берут разные подзадачи. Должны ли они связать одну общую реализацию stl? Различаются ли требования для соединения stati c и динамика Dynami c?