【发布时间】:2012-06-03 22:16:31
【问题描述】:
我成功地将库 LibXtract 编译为共享对象 libxtract.so,并希望在第二个项目中使用。
在提到的项目中,我尝试在简单的函数上编译它:
#include <com_androidnative1_NativeClass.h>
#include <android/log.h>
#include "libxtract.h"
JNIEXPORT void JNICALL Java_com_androidnative1_NativeClass_showText
(JNIEnv *env, jclass clazz)
{
float mean = 0, vector[] = {.1, .2, .3, .4, -.5, -.4, -.3, -.2, -.1}, spectrum[10];
int n, N = 9;
float argf[4];
argf[0] = 8000.f;
argf[1] = XTRACT_MAGNITUDE_SPECTRUM;
argf[2] = 0.f;
argf[3] = 0.f;
xtract[XTRACT_MEAN]((void *)&vector, N, 0, (void *)&mean);
__android_log_print(ANDROID_LOG_DEBUG, "LIbXtract", "Button pushe2");
}
我有扁平结构:
- jni/com_androidnative1_NativeClass.c
- jni/com_androidnative1_NativeClass.hjni/libxtract.h
- 来自 libxtract 接口的 jni/其他 *.h 文件
- jni/Android.mk
- jni/Applicatoin.mk
库 libxtract.so 我放在 mainproject/lib 文件夹中
我的 Android.mk 文件如下所示:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := com_androidnative1_NativeClass.c
LOCAL_MODULE := com_androidnative1_NativeClass
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/
LOCAL_LDLIBS += -llog
LOCAL_SHARE_LIBRARIES := libxtract
NDK_MODULE_PATH += $(LOCAL_PATH)/../lib/
include $(BUILD_SHARED_LIBRARY)
我仍然收到错误:
Compile thumb : com_androidnative1_NativeClass <= com_androidnative1_NativeClass.c
SharedLibrary : libcom_androidnative1_NativeClass.so./obj/local/armeabi/objs/com_androidnative1_NativeClass/com_androidnative1_Nativ eClass.o: In function `Java_com_androidnative1_NativeClass_showText':
/home/jack/Projects/AndroidNative1/jni/com_androidnative1_NativeClass.c:20: undefined reference to `xtract'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libcom_androidnative1_NativeClass.so] Error 1
代码来自 LibXtract 的示例,在 C++ 下编译没有问题,有什么想法吗?
【问题讨论】:
-
你究竟是如何编译 libxtract.so 的?为什么不将其编译添加到同一个 Android.mk 文件中,这样两个共享库就可以同时构建?
-
我通过采用这个解决方案来编译它link我只是添加了 shred 库以使其简单
-
这个答案听起来像是在解决你的问题。 stackoverflow.com/questions/10593987/android-ndk-linking/…
标签: android android-ndk