gpt4 book ai didi

java - 如何编译Java原生库?

转载 作者:行者123 更新时间:2023-11-30 05:45:50 25 4
gpt4 key购买 nike

我希望“编译”这个词用得对。我在这里问是因为我什至不确定要谷歌什么来获取更多信息。

我想在这里使用这个库: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

引用资料:

C++ Dynamic Shared Library on Linux

Build .so file from .c file using gcc command line

Sample tutorial

使用带有命令的 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

关于java - 如何编译Java原生库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29217407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com