Я пытаюсь скомпилировать библиотеку Android NDK для использования андроид-NDK-профайлер для профилирования.
В Audio.h
, Я имею:
extern "C" {
void monstartup(char const*);
void moncleanup();
}
В Audio.cpp
, Я имею:
#include "Audio.h"com_example_native_init(JNIEnv *env, jobject thiz) {
// Start profiling
monstartup("libDMAudiolib.so");
...
}
Я собираю с
ndk-build NDK_MODULE_PATH=/cygdrive/c/ndk_modules
И точная ошибка компиляции, которую я получаю,
Path/to/Audio.cpp:136: error: undefined reference to 'monstartup'
Есть ли гуру андроид ndk, кто может сказать мне, что происходит?
Звучит как monstartup
не получает ссылки (это похоже на ошибку компоновщика, а не на ошибку компилятора).
Убедитесь, что ваш Android.mk
имеет дополнения, показанные на Страница использования, особенно LOCAL_STATIC_LIBRARIES
директивы.
ndk-build
не очень хорошо работает с Cygwin. Пожалуйста, используйте C:/ndk-modules
и аналогичные обозначения в ваших сценариях.
LOCAL_STATIC_LIBRARIES := android-ndk-profiler
правильно, но это требует, чтобы ваш Andorid.mk
включает в себя что-то вроде
include $(CLEAR_VARS)
LOCAL_PATH := c:/ndk-modules/android-ndk-profiler
LOCAL_MODULE := android-ndk-profiler
LOCAL_SRC_FILES := libandprof.a
include $(PREBUILT_STATIC_LIBRARY)
(увидеть http://android-ndk-profiler.googlecode.com/svn-history/r11/wiki/Usage.wiki)
Это произошло со мной, и это произошло из-за того, что LOCAL_STATIC_LIBRARIES не в том месте в файле Android.mk. В частности, это должно было быть перед строкой «include $ (BUILD_SHARED_LIBRARY)».