在使用Java天然界面时,如何解决"致命:搬迁仍然针对可分配但不可靠的部分"?

 2023-01-19    323  

问题描述

我正在尝试在Java代码中调用C函数.
我有这个HAVA代码.

public class JavaToC {

    public native void helloC();

    static {
        System.loadLibrary("HelloWorld");
    }

    public static void main(String[] args) {
        new JavaToC().helloC();
    }
}

.我对其进行了编译,然后创建了标头文件.然后制作以下helloworld.c文件.

在使用Java天然界面时,如何解决"致命:搬迁仍然针对可分配但不可靠的部分"?

#include <stdio.h>
#include <jni.h>
#include "JavaToC.h"
JNIEXPORT void JNICALL Java_JavaToC_helloC(JNIEnv *env, jobject javaobj)
{
  printf("Hello World: From C");
  return;
}

我尝试使用” gcc -o libhelloworld.so -shared -i/usr/java/include -i/usr/java/include/solaris helloworld.c -lc”来编译此内容,但它给出以下结果.

Text relocation remains                     referenced
    against symbol          offset  in file
.rodata (section)                   0x9         /var/tmp//cc.GaGrd.o
printf                              0xe         /var/tmp//cc.GaGrd.o
ld: fatal: relocations remain against allocatable but non-writable sections
collect2: ld returned 1 exit status

我正在研究Solaris 11,我该如何解决?

推荐答案

我目前无法在Solaris机器上进行测试,但是来自 http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/sparc-options.html

-mimpure-text抑制了”对可分配但不可纠正的部分的重新定位”链接器错误消息.然而
必要的搬迁将触发抄袭,并共享
对象实际上并非跨进程共享.而不是使用
-mimpure-text,您应该用-fpic或-fPIC编译所有源代码.

该解决方案似乎是添加-fpic选项以生成独立于位置的代码.

以上所述是小编给大家介绍的在使用Java天然界面时,如何解决"致命:搬迁仍然针对可分配但不可靠的部分"?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

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

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

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