Включение директивы препроцессора C ++ в код — Android NDK

Привет эксперты StackOverFlow,

Я очень новичок в программировании Android и, к сожалению, мой первый проект в Android включает использование библиотек C ++. Это сторонние библиотеки, и их нужно использовать. Кроме того, я не знаком с C ++. Я успешно установил Android SDK (v4.2.2 и APIv 17) и NDK (android-ndk-r8e). Я смог скомпилировать код C ++ и создать проект eclipse и увидеть приложение, работающее на моем устройстве Android.

Но сегодня я узнал, что мне нужно скомпилировать директиву препроцессора C ++, чтобы некоторые функциональные возможности работали. Как я понимаю, директива препроцессора C ++ выполняется перед фактической компиляцией кода. Теперь, благодаря Google, я узнал, что способ выполнить директиву препроцессора — изменить файл makeall.sh, и я сделал следующее:

ARCH="armeabi armeabi-v7a mips x86"LIBDIR=../../mpcore/lib.android/libs

tmpdir=`mktemp -d /tmp/$0.XXXXX`

for arch in $ARCH; do
/Users/Desktop/android-ndk-r8e/ndk-build LOCAL_CPPFLAGS:=-DUSE_ORIGINAL_BACKGROUND LOCAL_LDFLAGS=-L$LIBDIR/$arch APP_ABI=$arch
cp libs/$arch/libsample.so $tmpdir/libsample.so.$arch
done

for arch in $ARCH; do
cp $tmpdir/libsample.so.$arch libs/$arch/libsample.so
done

rm -rf $tmpdir

где USE_ORIGINAL_BACKGROUND — это имя моей директивы C ++.

Когда я запускаю makeall.sh, он хорошо компилируется (по крайней мере, я не вижу ошибок). Затем я открываю свой проект eclipse, обновляю его и затем создаю файл APK. Но, к сожалению, я не вижу ожидаемых результатов.

Итак, мой вопрос ко всем: я что-то упустил? То, как я изменил свой makeall.sh, звучит правильно для вас?

Извините, если этот вопрос очень прост для всех вас, но он действительно поможет мне учиться и прогрессировать в изучении Android. Спасибо всем заранее

1

Решение

Я исправил проблему. Кажется, мне нужно было удалить весь существующий скомпилированный код C ++ из папок libs и obj. Затем я обновил проект eclipse, скопировал APK-файл на мое Android-устройство, и оно заработало !!!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]