昨天开始转用Android Studio,所以有些小白问题,请大家见谅。
问题1)jni/fft.cpp undefined reference to '__android_log_write'
Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := fft-jni
LOCAL_SRC_FILES := fft.cpp
LOCAL_LDLIBS := -Lbuild/platforms/android-1.5/arch-arm/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)
ftt.cpp文件的部分代码,问题出现在LOGE和LOGV使用的地方:
#include <math.h>
#include <android/log.h>
#include <cstddef>
#include "fft.h"
#define LOGV(v) \
__android_log_write(ANDROID_LOG_VERBOSE, "fft-jni" , (v))
#define LOGE(v) \
__android_log_write(ANDROID_LOG_ERROR, "fft-jni", (v))
int jniRegisterNativeMethods(JNIEnv* env, const char* className,
const JNINativeMethod* gMethods, int numMethods)
{
jclass clazz;
LOGV("Registering natives:");
LOGV(className);
clazz = env->FindClass(className);
if (clazz == NULL) {
LOGE("Native registration unable to find class:");
LOGE(className);
return -1;
}
if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
LOGE("RegisterNatives failed for:");
LOGE(className);
return -1;
}
LOGV("Successfully registered natives.");
return 0;
}
网上很多方法都是围绕着添加LOCAL_LDLIBS := llog
的,但我这里系统生成的mk里已经有这一行了,问题的原因可能不在这个上面,又可能是我系统中没有llog这个包(?),又或者是路径错误。但要怎么才能知道我系统有没有llog这个东西呢?
(之后有问题难以解决会在这里继续麻烦大家,跪坐。)
已解决(?):后来发现这两个东西都是用来输出信息的,没啥意义,注释掉了。。程序也运行出来了
学习是最好的投资!