3

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

4 回答 4

3

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

首先创建目标文件:

cc -c HelloWorld.c

然后创建so

cc -shared -o libHelloWorld.so HelloWorld.o
于 2013-04-05T08:36:00.737 回答
2

创建so文件有2个步骤:

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

查看静态、共享动态和可加载 Linux 库以了解详细信息。

于 2013-04-05T08:38:29.140 回答
-1

插入 -shared 标志

gcc -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include/linux -o libmyhello.so -shared HelloWorld.c
于 2018-05-01T12:29:16.200 回答
-3

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

int main(){
 return 0;
}

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

于 2013-04-05T08:31:42.290 回答