Вы можете создать файл общих объектов, используя указанную ниже команду.
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
Пример кода для запуска .so файл, используя Java с командами:
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
}
}
шаги для запуска выше .c файл, используя файл .java
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
Try 'г ++ mylibrary.cpp -o mylibrary.so -shared -fPIC'. –
Btw, это не «родная библиотека Java», это «родная библиотека». – m0skit0
@KerrekSB Хорошо, поэтому я пошел и скачал/установил MinGW и выполнил команду выше. Это сработало. Однако теперь, когда я пытаюсь использовать библиотеку, я получаю ** Не могу загрузить IA 32-bit .dll IA на 64-разрядную платформу AMD **. Как я могу решить, какие параметры мне нужны или что-то еще? – FTLRalph