Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Paul KinzelmanОтветов: 1

У меня есть файл 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, но это приводит к той же ошибке. Есть идеи, почему? Спасибо!

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

c++buildandroidandroid-ndk

Ответы

Ответ 1 · рейтинг 4 · genk

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы