Android ndk Android NDK链接到静态库

Android ndk Android NDK链接到静态库,android-ndk,Android Ndk,对“get_int()”的未定义引用 我正在尝试用android构建共享库。 此库使用预构建的静态库“libATest.a”中的函数 我已经尝试了所有我能用的方法。总是出现错误“未定义对'get_int()'的引用”,但我已经在libAtest.a中定义了它。呼救! 安卓ndk r8 Android.mk: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ATest LOCAL_SRC_FILES := l

对“get_int()”的未定义引用

我正在尝试用android构建共享库。 此库使用预构建的静态库“libATest.a”中的函数 我已经尝试了所有我能用的方法。总是出现错误“未定义对'get_int()'的引用”,但我已经在libAtest.a中定义了它。呼救! 安卓ndk r8

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := ATest
LOCAL_SRC_FILES := libATest.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := capi
LOCAL_SRC_FILES := capi.cpp

LOCAL_STATIC_LIBRARIES := ATest
LOCAL_LDLIBS := -llog
#LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
include $(BUILD_SHARED_LIBRARY)
atest.h:

int get_int();
Application.mk:

APP_MODULES :=capi
capi.cpp:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <jni.h>
#include <string.h>
#include <android/log.h>

#include "atest.h"

#ifdef __cplusplus
extern "C" {
#endif

jstring Java_com_wzh_test_AndriodJNITestActivity_ttstest(JNIEnv* env, jobject thiz){
    get_int();
    return env->NewStringUTF("I'm from C!");
}


#ifdef __cplusplus
}
#endif

您需要在<代码>外部“C”块中包装<代码> GETYOTIN <代码>,否则它将被视为具有C++链接。

您可以知道,它被当作C++函数来对待,因为链接器错误提到函数签名(<代码> GETAIGN()/<代码>,而不是<代码> GETyIt)。 编辑:


第二个问题是调用了库源文件
libATest.a
!必须编译静态库。相反,您应该有一个包含源代码的文件
atest.c
(函数
get_int
),并在构建
atest
库时使用
LOCAL\u SRC\u FILES:=atest.c
。您还需要删除
libATest.a
,以避免任何依赖性问题。

在我将外部“C”添加到.h和.a文件后,出现错误“未定义对` get_int'的引用”。天哪!救命啊!不幸的是,我不得不使用libATest.a,它是由其他公司提供的,我无法获得源代码。现在我正在做一个测试,所以我只构建了一个名为“libATest.a”的简单静态库。我告诉你的是,你没有正确构建静态库。
#include "atest.h"
int get_int(){
    return 55;
}