Android.mk将编译.c源代码而不是.cpp

时间:2011-09-14 04:31:11

标签: android c++ build android-ndk

我有一个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构建中遗留了一些东西,但这会导致同样的错误。知道为什么吗?谢谢!

1 个答案:

答案 0 :(得分:4)

我知道你很久以前就问过了。但无论如何 - 对于像我这样的其他人:

我刚刚解决了这个问题。 由于某些原因,即使您在LOCAL_SRC_FILES更改源列表,清除构建也无法完成工作。 我必须导航到项目中的\obj\local\armeabi\objs\并手动清除.o个文件。

之后编译好了。