Android.mk скомпилирует исходный код .c, но не .cpp - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть файл 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 Ответ

4 голосов
/ 28 августа 2012

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

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

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

...