编译JNI的麻烦

时间:2013-04-05 08:26:09

标签: java c linux gcc java-native-interface

我通过引用已经用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

如何解决此问题?

4 个答案:

答案 0 :(得分:3)

您必须添加-shared链接器选项

首先创建目标文件:

cc -c HelloWorld.c

然后创建所以

cc -shared -o libHelloWorld.so HelloWorld.o

答案 1 :(得分:2)

创建so文件有两个步骤:

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

详细了解Static, Shared Dynamic and Loadable Linux Libraries

答案 2 :(得分:-1)

插入-shared标志

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

答案 3 :(得分:-3)

您需要添加主要功能。添加

int main(){
 return 0;
}

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

相关问题