2015-03-23 5 views
1

Надеюсь, это правильное слово для использования, «скомпилируйте». Я спрашиваю здесь, так как я даже не уверен, что для Google, чтобы получить дополнительную информацию.Как скомпилировать родную библиотеку Java?

Я хочу использовать эту библиотеку здесь: http://jiggawatt.org/badc0de/android/#gifflen

Загрузка дает кучу .cpp и .h файлов. Из того, что я понимаю, мне нужен файл .so, чтобы использовать System.loadLibrary(libName).

Что я не могу понять, как скомпилировать эти файлы C++ в необходимый .so-файл?

+1

Try 'г ++ mylibrary.cpp -o mylibrary.so -shared -fPIC'. –

+0

Btw, это не «родная библиотека Java», это «родная библиотека». – m0skit0

+0

@KerrekSB Хорошо, поэтому я пошел и скачал/установил MinGW и выполнил команду выше. Это сработало. Однако теперь, когда я пытаюсь использовать библиотеку, я получаю ** Не могу загрузить IA 32-bit .dll IA на 64-разрядную платформу AMD **. Как я могу решить, какие параметры мне нужны или что-то еще? – FTLRalph

ответ

1

Вы можете создать файл общих объектов, используя указанную ниже команду.

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 
Смежные вопросы