2016-01-13 3 views
0

У меня есть большое количество C++ код должен быть запущен на Android.
Этот код компилируется с помощью Visual C++ компилятор, но он не скомпилирован с gcc (который используется Android NDK). Проблема заключается в том, что источник содержит много частей, что генерирует ошибку при gcc. Возможно ли скомпилировать источник под VC++ и запустить его на Android? Спасибо.Есть ли способ скомпилировать Visual C++-код для Android?

+0

* генерирует ошибку при gcc * похоже, что код использует MS extenstion (или библиотеку окон) ... тогда ответ не будет ... – Selvin

+0

Спасибо! Нет, он не использует их. Корень ошибок состоит в том, что источник не соответствует стандартам C++, но gcc делает. –

ответ

0

Единственный способ запустить родной код C/C++ в java (и так Android) с JNI (Java Native Interface).

Это лучший учебник на сегодняшний день, который поможет вам настройку JNI с Android Studio и Android NDK: http://ph0b.com/new-android-studio-ndk-support/

В вашем случае вы должны извлечь исходный код ваших C++ проект (то есть все .cpp; .h; .hpp файлов) и добавить их в папку JNI (как только вы настроили среду JNI с вышеупомянутым учебником (или любым другим руководством). Gradle скомпилирует их, если вы правильно включите библиотеку.

NB:

  • Вам не нужно в Makefile: вместо того, чтобы использовать CFLAGS в вашем Gradle построить файл;
  • Убедитесь, что правильно поняли JNI, чтобы создать правильные файлы заголовков, которые свяжут ваш собственный код с вашим java-кодом;

Надеюсь, это поможет!

+0

Спасибо! Если я использую Java NDK (как вы говорите), значит, я использую GCC. Но код не компилируется под GCC. Я пытаюсь найти обходное решение вместо изменения исходного кода, чтобы он скомпилировался под GCC. –

+0

Это правда, что Android NDK использует GCC. Каковы ошибки (-ы) компиляции? У вас есть Makefile? Я не очень осведомлен в C++, но могу вам помочь, если это возможно. – Mackovich

+0

Есть много ошибок из-за нестандартного исходного кода ... Действительно, много. Только некоторые из них, например: [тени] (http://stackoverflow.com/questions/20875033/clang-vs-vcerror-declaration-of-t-shadows-template-parameter); ** Отсутствие ошибок в именах типов **; ** std :: ошибки исключения **; [дополнительная квалификация] (http://stackoverflow.com/questions/5642367/extra-qualification-error-in-c) И так далее. Я уже исправил пару, но это кажется бесконечным. –

Смежные вопросы