Могу ли я сделать проект с определенным STL и связать его с общей библиотекой, которая была скомпилирована с другим STL? - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть целый проект, который работает с c ++ _ static .В рамках этого проекта одной из библиотек является " Opencv ", популярная библиотека .

Это c ++ контент, скомпилированный для android , онаработает со статическими ссылками без каких-либо оптимизаций, таких как VPVF3 или NEON (лучше всего).

Затем, просмотрев множество статей / форумов, я увидел, что Opencvнужно оптимизаций на ARM Если мы хотим сделать несколько исчисление с помощью opencv.

Чтобы сделать это, яуспешно скомпилирован Opencv (3.4.4) с NEON оптимизации .

Но когда я хочу связать его в своем проекте, яиметь несколько неопределенных ссылок , таких как:

ошибка: неопределенная ссылка на 'cv :: read (cv :: FileNode const &, std ::Ошибка __ndk1 :: vector

&): неопределенная ссылка на ошибку 'cv :: write (cv :: FileStorage &, cv :: String const &, std :: __ ndk1 :: vector> const &)': неопределенная ссылка на 'cv :: KeyPointsFОшибка ilter :: retainBest (std :: __ ndk1 :: vector> &, int) ': неопределенная ссылка на' cv :: read (cv :: FileNode const &, std :: __ ndk1 :: basic_string, std :: __ ndk1 :: allocator> &, std :: __ ndk1 :: basic_string, std :: __ ndk1 :: allocator> const &) 'ошибка: неопределенная ссылка на' cv :: KeyPointsFilter :: retainBest (std :: __ ndk1 :: vector> &, int) 'ошибка: неопределенная ссылка на 'cv :: KeyPointsFilter :: retainBest (std :: __ ndk1 :: vector> &, int)' ошибка: неопределенная ссылка на 'cv :: DescriptorMatcher :: knnMatch (cv :: _ InputArray const &, cv :: _ InputArrayconst &, std :: __ ndk1 :: vector>, std :: __ ndk1 :: allocator>>> &, int, cv :: _ InputArray const &, bool) const 'ошибка: неопределенная ссылка на' cv :: DescriptorMatcher :: knnMatch (cv:: _ InputArray const &, cv :: _ InputArray const &, std :: __ ndk1 :: vector>, std :: __ ndk1 :: allocator>>> &, int, cv :: _ InputArray const &, bool) const 'ошибка: неопределенная ссылка на'cv :: KeyPointsFilter :: retainBest (std :: __ ndk1 :: vector> &, int) 'ошибка: неопределенная ссылка на' cv :: DescriptorMatcher :: knnMatch (cv :: _ InputArray const &, cv :: _ InputArray const &, std :: __ ndk1 :: vector>, std :: __ ndk1 :: allocator>>> &, int, cv :: _ InputArray const &, bool) const 'ошибка: неопределенная ссылка на' cv ::DescriptorMatcher :: knnMatch (cv :: _ InputArray const &, cv :: _ InputArray const &, std :: __ ndk1 :: vector>, std :: __ ndk1 :: allocator>>> &, int, cv :: _ InputArray const &, bool) const 'ошибка: неопределенная ссылка на cv :: drawKeypoints (cv :: _ InputArray const &, std :: __ ndk1 :: vector const &, cv :: InputOutputArray const &, cv :: Scalar const &, int) 'clang ++: ошибка: сбой команды компоновщика с кодом завершения 1 (используйте -v для просмотра вызова) ninja: сборка остановлена: подкоманда не выполнена.

Информация ->

  • С Opencv без оптимизаций она была связана со статическими библиотеками с тем же ANDROID STL, что и у проекта ( c ++ _ static ).

  • Но до сих пор я никогдакогда-нибудь хорошее случилось, когда я хотел бы скомпилировать Opencv с NEON и c ++ _ static , однако с "gnustl_static"она отлично скомпилирована.

РЕЗЮМЕ ИНФОРМАЦИЯ:

без NEON -> STATIC LIB (c ++ _ static).с NEON -> SHARED LIB (gnustl_static), почему?

Потому что, если я хочу связать эти библиотеки Opencv с NEON без того же STL , она должна соединитьсяс shared lib я видел, что вы можете связать совместно используемую библиотеку с другим STL, это не создаст никаких проблем, кстати, это мой вопрос.

Могу ли я сделать проект с помощью stl( c ++ _ static ) и связанный с ним общий lib с stl ( gnustl_static )?

Если у вас есть идеи, я буду очень признателен, и вы будете очень полезны!

РЕДАКТИРОВАТЬ 29 НОЯБРЯ (решено)


Привет всем после поиска и разговоров с кем-то, я обнаружил, что вы можете, но с одним условием, я объясню.

В случае, если вы хотите смешать STL вашей глубины,Вы должны скомпилировать все ваши зависимости с помощью «_shared», например «c ++ _ shared» вместо «c ++ static», которое будет связываться с STD с помощью метода с общим доступом.И если у вас есть библиотека с «gnustl *», вы должны скомпилировать ее с «gnustl_shared».

Все ваши зависимости и весь ваш проект.

После этого,Надеюсь, у тебя все получится.

Этот вопрос решен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...