Использование stl в родной программе оболочки Android adb - PullRequest
1 голос
/ 06 февраля 2012

Я пытаюсь портировать служебную программу C ++, которую я хочу запустить из оболочки Android ADB.Для этого я использую скрипт Android- NDK make-standalone-toolchain.sh и собираю с ним свою программу.К сожалению, когда я пытаюсь запустить его, я получаю эту ошибку:

reloc_library[1315]: 16304 cannot locate '_ZNKSs5c_strEv'...
CANNOT LINK EXECUTABLE

После некоторых исследований я обнаружил, что это означает, что функция c_str не существует в libstdc ++., Поэтому в NDK.Я также не смог найти символ в stlport.so, и фактически нашел его только в версии ./sources/cxx-stl/gnu-libstdc++/libs/ библиотек C ++.Эти библиотеки не включены в автономный набор инструментов, который я сделал, и я также не смог найти их на устройстве (устройство работает под управлением Honeycomb).

В тексте в NDK четко указано, что есть поддержка для всегоSTL, когда я использую stlport.Это то, что верно только в Ice Cream Sandwich?В libstlport.so или в libsupc ++. Поэтому на устройстве и в NDK не было подписи, подобной той, которая не была найдена.

Поэтому мой вопрос состоит из двух частей:

  1. Что-то мне не хватает в процессе сборки / настройки Android?Могу ли я настроить все по-другому, чтобы программа компилировалась без использования gnu-libstc ++, или, по крайней мере, потерпела неудачу с ошибкой компиляции / ссылки вместо того, чтобы не загружаться на устройство?
  2. При связывании с gnu-libstc ++это единственный способ, как я могу это сделать?Я думаю, что я могу управлять статически ссылками на него, но я бы предпочел этого не делать.

Как я могу добавить версию gnu-libstdc ++ к моей

1 Ответ

0 голосов
/ 25 июля 2012

Если кто-то ищет решение, я заканчивал тем, что добавил зависимость, используя ключ -l в libgnustl_shared.so. Вы можете найти его в NDK на

sources/cxx-stl/gnu-libstdc++/libs/&ltarchitecture&gt/

Затем я отправил это .so вместе с программой на устройство и создал скрипт, который добавляет текущий каталог в LD_LIBRARY_PATH. Это похоже на то, что делает NDK, когда вы используете сценарии make для создания программы, зависящей от gnustl.

...