我希望这是一个正确的词,"compile"。我在这里问,因为我甚至不知道用谷歌搜索什么来获得更多信息。
我想在这里使用这个库:http://jiggawatt.org/badc0de/android/#gifflen
下载提供了一堆.cpp和.h文件。据我所知,我需要一个.so文件才能使用System.loadLibrary(libName)
。
我想不通的是如何将这些C++文件编译成必要的.so文件?
您可以使用下面提到的命令创建共享对象文件。
gcc -shared -fpic -o <so-file-name>.so a.c b.c
在Mac OS X上,使用:编译
g++ -dynamiclib -flat_namespace myclass.cc -o myclass.so
g++ class_user.cc -o class_user
在Linux上,使用:进行编译
g++ -fPIC -shared myclass.cc -o myclass.so
g++ class_user.cc -ldl -o class_user
参考文献:
Linux 上的C++动态共享库
使用gcc命令行从.c文件构建.so文件
示例教程
使用java和命令运行.so文件的示例代码:
HelloJNI.c
#include <jni.h>
#include <stdio.h>
#include "HelloJNI.h"
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj) {
printf("Hello World!n");
return;
}
HelloJNI.java
public class HelloJNI {
static {
System.loadLibrary("hello"); // hello.dll (Windows) or libhello.so (Unixes)
}
// A native method that receives nothing and returns void
private native void sayHello();
public static void main(String[] args) {
new HelloJNI().sayHello(); // invoke the native method
}
}
使用.java文件在.c文件之上运行的步骤
javac HelloJNI
javah HelloJNI
gcc -shared -fpic -o libhello.so -I/usr/java/default/include -I/usr/java/default/include/linux HelloJNI.c
java -Djava.library.path=. HelloJNI