2

我正在尝试编译一个 Android NDK 库以使用android-ndk-profiler进行分析。

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'

有没有 android ndk 大师可以告诉我发生了什么?

4

3 回答 3

1

听起来好像monstartup没有被链接(看起来像链接器错误,而不是编译器错误)。

确保您Android.mk使用页面上显示的添加内容,尤其是LOCAL_STATIC_LIBRARIES指令。

于 2013-06-05T22:13:37.233 回答
1

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

于 2014-03-05T07:51:28.517 回答
0

这发生在我身上,这是由于 LOCAL_STATIC_LIBRARIES 在 Android.mk 文件中的位置错误。特别是,它必须在“include $(BUILD_SHARED_LIBRARY)”行之前。

于 2014-03-05T07:29:03.457 回答