我已经看到了类似于这个问题的问题,但情景并不完全相同,我也无法找到适用于我的问题的答案.
我有一个C++库的源代码.我们需要将此库用作Android应用程序的一部分,但它也需要可供第三方用作C++库.
我有一个makefile,使用ndk的编译器从库的源代码生成.a文件.那是纯粹的C++部分.
在Java部分,我有一个简单的演示项目,其中包含一个包含按钮的简单活动.按下按钮时,将调用本机代码.
只要我不尝试从JNI函数调用库中的函数,一切正常.
以下是图书馆的来源:
SimpleMath.h
int Add(int aNumber1, int aNumberB);
Run Code Online (Sandbox Code Playgroud)
SimpleMath.cpp
#include "SimpleMath.h"
int Add(int aNumberA, int aNumberB)
{
return aNumberA + aNumberB;
}
Run Code Online (Sandbox Code Playgroud)
在生成文件
APP = simple_app
LIBRARY = simple_library.a
OBJECTS = SimpleMath.o
CFLAGS = -Wall -pedantic
NDK_PATH = /home/jug/perforce/jug_navui_personal_main/Env/Linux/Android/ndk/r7c
CXX = $(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++
AR = $(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ar
SYSTEM_LIBS = -lstdc++ -lm
INCLUDE_PATH += ${NDK_PATH}/platforms/android-9/arch-arm/usr/include
all: $(LIBRARY)
$(LIBRARY):
$(CXX) -c SimpleMath.c
$(AR) rcs simple_library.a SimpleMath.o
clean:
rm *.o *.a
Run Code Online (Sandbox Code Playgroud)
在java方面,这些是文件:
你好,jni.c
#include <string.h>
#include <jni.h>
#include "../../../native/simple_library/SimpleMath.h"
jstring …Run Code Online (Sandbox Code Playgroud)