Почему не может быть разных реализаций stl с использованием NDK? - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь построить проект на основе двух библиотек с открытым исходным кодом. Я использую библиотеки 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, и конфликт не должен возникать.

  1. Все ли файлы из выпуска opencv скомпилированы с помощью gnustl_stati c?
  2. Почему __ndk1 появляется в std :: vector?
  3. Для одного большого проекта разные инженеры берут разные подзадачи. Должны ли они связать одну общую реализацию stl? Различаются ли требования для соединения stati c и динамика Dynami c?
...