如何构建一个共享库,并把它在其他NDK程序 [英] How to build an shared library and call it in other ndk program
问题描述
我想建立一个共享库。要建立它,我需要调用另一个共享库。这是我做的:
1,创建一款使用Android操作系统的项目,名为BUILDLIB,并在项目目录下添加一个新文件夹JNI。 JNI文件夹的内容:
JNI - > Android.mk
- > Application.mk
- > add.cpp
- > add.h add.cpp只是做两个数字加法:
add.h:
INT添加(INT A,INT B);
add.cpp:
的#includeadd.h INT附加(INT A,INT B){ 返回A + B;}
Android.mk:
LOCAL_PATH:= $(叫我-DIR) 包括$(CLEAR_VARS) LOCAL_SRC_FILES:= add.cpp LOCAL_MODULE:=添加 包括$(BUILD_SHARED_LIBRARY)
建立后的项目,我得到了libadd.so目录下的 $(BUILDLIB)/库/ armeabi /
。
创建另一个Android项目,命名为CallLib。复制 libadd.so
和 add.h
来JNI文件夹,创建 Android.mk
, Application.mk
和 call_add.cpp
。
Android.mk:
LOCAL_PATH:= $(叫我-DIR) 包括$(CLEAR_VARS) LOCAL_SRC_FILES:= libadd.so LOCAL_MODULE:= add_ prebuilt 包括$(preBUILD_SHARED_LIBRARY) 包括$(CLEAR_VARS) LOCAL_C_INCLUDES:= $(LOCAL_PATH) LOCAL_SRC_FILES:= call_add.cpp LOCAL_MODULE:=本地 LOCAL_SHARED_LIBRARIES:= add_ prebuilt 包括$(BUILD_SHARED_LIBRARY)
call_add.cpp:
的#includeadd.h INT call_add(){返回加(1,2);}
在上述所有,我建立了CallLib项目,但得到了错误:
未定义的引用添加(INT,INT)';
我觉得 libadd.so
无法找到,但我不知道该怎么修改。有谁知道我怎么能解决这个问题?任何帮助将AP preciated。
在你的第二个 Android.mk
,尝试更换的第一个模块:
LOCAL_PATH:= $(叫我-DIR)
包括$(CLEAR_VARS)
LOCAL_SRC_FILES:= libadd.so
LOCAL_MODULE:= add_ prebuilt
LOCAL_EXPORT_C_INCLUDES:= add.h
包括$(preBUILD_SHARED_LIBRARY)
在 LOCAL_EXPORT_C_INCLUDES
标志应附有头信息到 add_ prebuilt
模块,所以可以与您的最终库链接。
I want to build an shared library. To build it, I need to call another shared library. Here is what I did:
1.Create one Android project,named "BuildLib",and add a new folder "jni" under the project directory. Contents of jni folder:
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)
After build the project,I got libadd.so under directory $(BUILDLIB)/libs/armeabi/
.
Create another Android project, named "CallLib". Copy libadd.so
and add.h
to jni folder, create Android.mk
, Application.mk
, and 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);}
After all above, I build the CallLib project, but got the error:
undefined reference to 'add(int, int)';
I think the libadd.so
can not be found, but I don't know how to modify. Does anyone know how I can fix this? Any help will be appreciated.
In your second Android.mk
, try replacing the first module with:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := libadd.so
LOCAL_MODULE := add_prebuilt
LOCAL_EXPORT_C_INCLUDES := add.h
include $(PREBUILD_SHARED_LIBRARY)
The LOCAL_EXPORT_C_INCLUDES
flag should attach the header information to the add_prebuilt
module, so it can be linked with your final library.
这篇关于如何构建一个共享库,并把它在其他NDK程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!