如何构建共享库并在其他ndk程序中调用 [英] How to build an shared library and call it in other ndk program
问题描述
我想建立一个共享库.要构建它,我需要调用另一个共享库.这是我所做的:
1.创建一个Android工程,命名为BuildLib",在工程目录下新建文件夹jni".jni文件夹内容:
<块引用>jni-->Android.mk
-->Application.mk
-->添加.cpp
-->add.h add.cpp 只是做两个数字相加:
添加.h:
<块引用>int add(int a,int b);
添加.cpp:
<块引用>#include "add.h"int add(int a,int b){返回 a+b;}
Android.mk:
<块引用>LOCAL_PATH := $(call my-dir)包括 $(CLEAR_VARS)LOCAL_SRC_FILES := add.cppLOCAL_MODULE := 添加包括 $(BUILD_SHARED_LIBRARY)
构建项目后,我得到了目录$(BUILLDIB)/libs/armeabi/
下的libadd.so.
创建另一个名为CallLib"的 Android 项目.复制libadd.so
和add.h
到jni文件夹,创建Android.mk
、Application.mk
,然后call_add.cpp
.
Android.mk:
<块引用>LOCAL_PATH := $(call my-dir)包括 $(CLEAR_VARS)LOCAL_SRC_FILES := libadd.soLOCAL_MODULE := add_prebuilt包括 $(PREBUILD_SHARED_LIBRARY)包括 $(CLEAR_VARS)LOCAL_C_INCLUDES := $(LOCAL_PATH)LOCAL_SRC_FILES := call_add.cppLOCAL_MODULE := 本机LOCAL_SHARED_LIBRARIES := add_prebuilt包括 $(BUILD_SHARED_LIBRARY)
call_add.cpp:
<块引用>#include "add.h"int call_add(){return add(1,2);}
综上所述,我构建了 CallLib 项目,但得到了错误:
<块引用>对 'add(int, int)' 的未定义引用;
我认为libadd.so
找不到,但我不知道如何修改.有谁知道我该如何解决这个问题?任何帮助将不胜感激.
在您的第二个 Android.mk
中,尝试将第一个模块替换为:
LOCAL_PATH := $(call my-dir)包括 $(CLEAR_VARS)LOCAL_SRC_FILES := libadd.soLOCAL_MODULE := add_prebuiltLOCAL_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屋!