Chcę zbudować bibliotekę współdzieloną. Aby go zbudować, muszę zadzwonić do innej udostępnionej biblioteki. Oto co zrobiłem:Jak zbudować bibliotekę współdzieloną i wywołać ją w innym programie NTK
1.Utwórz jeden projekt Androida o nazwie "BuildLib" i dodaj nowy folder "jni" w katalogu projektu. Zawartość folderu JNI:
jni-->Android.mk
-->Application.mk
-->add.cpp
-->add.h add.cpp just do two numbers addition:
add.h:
int add(int a,int b);
add.cpp:
#include "add.h" int add(int a,int b){ return a+b;}
Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := add.cpp LOCAL_MODULE := add include $(BUILD_SHARED_LIBRARY)
Po budowania projektu, Mam libadd.so w katalogu $(BUILDLIB)/libs/armeabi/
.
Utwórz kolejny projekt Androida o nazwie "CallLib". Skopiuj libadd.so
i add.h
do folderu jni, utwórz Android.mk
, Application.mk
i call_add.cpp
.
Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := libadd.so LOCAL_MODULE := add_prebuilt include $(PREBUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_C_INCLUDES := $(LOCAL_PATH) LOCAL_SRC_FILES := call_add.cpp LOCAL_MODULE := native LOCAL_SHARED_LIBRARIES := add_prebuilt include $(BUILD_SHARED_LIBRARY)
call_add.cpp:
#include "add.h" int call_add(){return add(1,2);}
Wszakże powyżej, buduję projekt CallLib, ale mam błąd:
undefined reference to 'add(int, int)';
myślę libadd.so
nie można znaleźć, ale nie wiem, jak to zmienić. Czy ktoś wie, jak mogę to naprawić? Każda pomoc zostanie doceniona.
You używali Eclipse do kompilowania po prawej? Naprawdę utknąłem w Android Studio. Jeśli masz pojęcie o tym, jak to zrobić w Android Studio, daj mi znać. –
pokrewne: https://stackoverflow.com/questions/8358210/how-to-create-a-shared-library-in-android –