Не удается найти символ "пол" во время выполнения

Я кросс-скомпилировал сервер http Mongoose для Android, используя Linux в качестве системы BUILD, android-ndk от Google в качестве набора инструментов и пользовательский скрипт, который в итоге выполняет следующую команду:

arm-linux-androideabi-gcc -DANDROID -march=armv7-a -mfpu=neon \
  -mfloat-abi=softfp -mvectorize-with-neon-quad \
  -I /opt/android-ndk-r9d/platforms/android-19/arch-arm/usr/include \
  -I ~/Package_sources/BUILD_arm-linux-androideabi/include \
  -DMONGOOSE_USE_LUA -DMONGOOSE_USE_LUA_SQLITE3 \ 
  -L/opt/android-ndk-r9d/platforms/android-19/arch-arm/usr/lib \
  -L~/Package_sources/BUILD_arm-linux-androideabi/lib \
  -L~/Package_sources/BUILD_arm-linux-androideabi/lib -lluasqlite3 \
  server.c mongoose.c -o server -llua51 -lm

Скрипты работают без ошибок, и создается финальный исполняемый файл 'server'. Проблема у меня сейчас при попытке запустить его на Android. Он жалуется, что математические символы (определенные в libm), такие как "floor", не могут быть найдены. Я не очень понимаю, почему их можно найти во время компиляции, но не во время выполнения, но у меня есть некоторые сомнения по поводу кросс-компиляции для Android и настройки компиляции, которые я опишу ниже:

  • Некоторые параметры / флаги, которые я выбрал для кросс-компиляции, являются произвольными, так как я не до конца понимаю все (тысячи) параметров gcc и выбрал то, что люди предлагают на разных форумах. В частности, -mfloat-abi = softfp, -mfpu = неон и -mvectorize-with-neon-quad

  • Я также выбрал произвольно платформы /android-19, так как это был самый новый установленный в моей системе. Я не знаю точно, чем отличаются версии "N" для android и каковы последствия выбора той или иной версии (безопаснее ли выбрать самую новую?, самую старую?) Или я должен выбрать другую для каждой другое устройство / цель?).

  • Я также произвольно выбрал сборку gcc-4.6 arm-linux-androideabi-gcc. В android-ndk также установлен gcc-4.8. Есть ли какие-то предпочтения, или опять же, это зависит от конечной цели? (а может это и не имеет ничего общего)

Заранее спасибо за любую помощь, подсказку или ссылку!

1 ответ

Решение

Наконец, похоже, что источником проблем был отсутствующий флаг компиляции в библиотеках LUA (-DLUA_USE_DLOPEN). Это привело к тому, что программное обеспечение правильно скомпилировалось, но во время выполнения оно не смогло загрузить символы, определенные "где-либо еще".

Другие вопросы по тегам