Android.mk будет компилировать исходный код .c, но не .cpp

У меня есть файл Android.mk, который отлично компилирует мой код NDK C:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := galib
LOCAL_SRC_FILES := galib.c tables-lr35-contam.c tables-lr35-perf.c
LOCAL_CFLAGS    := -DTARGET_ANDROID=1
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
include $(BUILD_SHARED_LIBRARY)

Я хотел бы назвать первый источник galib.cpp вместо .c, потому что это имя мне нужно, чтобы оно было при компиляции в среде WPF. Это действительно просто код C, но для создания DLL я должен назвать ее .cpp, чтобы она правильно обрабатывала материал __declspec(dllexport).

Однако, когда я переименовываю его в galib.cpp и изменяю файл .mk, чтобы сказать то же самое, и пытаюсь собрать его для Android, я получаю сообщение об ошибке:

$ ndk-build
make: *** No rule to make target `/cygdrive/c/apk/adev/android/etold/jni/galib.c',
    ...needed by `/cygdrive/c/apk/adev/android/etold/obj/local/armeabi/objs/galib/galib.o'.  Stop.

как будто по какой-то причине ему все еще нужен файл .c. Я также попробовал «ndk-build -B» на случай, если что-то осталось от сборки .c, но это приводит к той же ошибке. Есть идеи, почему? Спасибо!


person Paul Kinzelman    schedule 14.09.2011    source источник
comment
я думаю, это поможет вам :: hashspeaks.wordpress.com/2010 /01/27/android-mk-документация   -  person Nikunj Patel    schedule 14.09.2011
comment
developer.android.com/sdk/ndk/overview.html   -  person Nikunj Patel    schedule 14.09.2011
comment
Я уже смотрел на это, и казалось, что все, что мне нужно было сделать, это переименовать в .cpp и изменить LOCAL_SRC_FILES. Но я перечитал его и увидел LOCAL_CPP_EXTENSION, поэтому я попытался явно сказать, что расширение было .cpp, но это не помогло. Я попробовал .cxx, как показано в примере, и теперь я получаю сообщение об ошибке «Неподдерживаемые расширения исходных файлов». Возможно, сопротивление бесполезно. :-)   -  person Paul Kinzelman    schedule 14.09.2011


Ответы (1)


Я знаю, что вы давно об этом спрашивали. Но в любом случае - для таких же, как я:

Я тоже сейчас занялся этой проблемой. По какой-то причине чистая сборка не работает, даже когда вы меняете список источников в LOCAL_SRC_FILES. Мне пришлось перейти к \obj\local\armeabi\objs\ внутри проекта и очистить .o файлов вручную.

После этого компилируется нормально.

person genk    schedule 28.08.2012