1

`get_int()'への未定義の参照

私はAndroidで共有ライブラリを構築しようとしています。このライブラリは、構築済みの静的ライブラリ「libATest.a」の関数を使用しています。使用できるすべてのメソッドを試しました。「`get_int()'への未定義の参照」というエラーが常に発生しますが、libAtest.aで定義しています。助けを呼びます! Android 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

libATest.a:

#include "atest.h"
int get_int(){
    return 55;
}
4

1 に答える 1

0

get_intブロックもラップする必要がありますextern "C"。そうしないと、C++ リンケージを持つものとして扱われます。

get_int()リンカ エラーが関数シグネチャ (ではなく) に言及しているため、C++ 関数として扱われていることがわかりますget_int

編集: 2 番目の問題は、ライブラリ ソース ファイルを呼び出したことですlibATest.a。静的ライブラリはコンパイルする必要があります。代わりに、atest.cソース コード (get_int関数)を含むファイルを用意し、ライブラリLOCAL_SRC_FILES := atest.cをビルドするときに使用する必要があります。また、依存関係の問題を回避するためATestに削除する必要があります。libATest.a

于 2012-10-23T03:42:00.877 に答える