我已經通過參考與JNI已經生成的報頭文件中實現以下的C代碼:麻煩與編譯JNI
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
當我試圖編譯它(以產生這樣的庫),使用:
cc -g -I/usr/lib/jvm/java-7-openjdk/include
-I/usr/lib/jvm/java-7-openjdk/include/linux HelloWorld.c -o libHelloWorld.so
我得到這個錯誤:
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
我怎樣才能解決這個問題?
我和OP有同樣的錯誤。我設法正確運行第一個命令,但是,在運行第二個命令後,我得到這個:/ usr/bin/ld:HelloWorld.o:在創建共享對象時,無法使用針對'.rodata'的重定位R_X86_64_32;用-fPIC重新編譯 HelloWorld.o:錯誤添加符號:錯誤值 collect2:錯誤:ld返回1退出狀態 任何想法? – hadis 2018-02-01 22:00:11
@hadis您可能需要使用-fPIC進行編譯,因爲錯誤提示 – msam 2018-02-05 10:20:33
工作正常,謝謝。 – hadis 2018-02-05 17:18:19