簡體   English   中英

編譯JNI的麻煩

[英]Trouble with compiling JNI

我通過引用已經使用JNI生成的頭文件實現了以下C代碼:

#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL 
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
     printf("Hello World!\n");
     return;
}

當我嘗試使用以下方法編譯它(生成so庫)時:

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

我該如何解決這個問題?

你必須添加-shared鏈接器選項

首先創建目標文件:

cc -c HelloWorld.c

然后創建所以

cc -shared -o libHelloWorld.so HelloWorld.o

創建so文件有兩個步驟:

 cc -c test.c
 cc -shared test.o -o test.so

有關詳細信息請查看靜態,共享動態和可加載Linux庫

插入-shared標志

gcc -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include/linux -o libmyhello.so -shared HelloWorld.c

你需要添加main函數。

int main(){
 return 0;
}

,或者int main(char *argv[], int argc)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM