编译JNI的麻烦

 2023-01-21    321  

问题描述

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

编译JNI的麻烦

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

然后创建SO

cc -shared -o libHelloWorld.so HelloWorld.o

其他推荐答案

创建一个SO文件有2个步骤:

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

看看详细信息.

其他推荐答案

插入-shared标志

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

以上所述是小编给大家介绍的编译JNI的麻烦,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26233.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。