使用Java本机接口时如何解决“致命:重定位仍然针对可分配但不可写的部分”?

2023-12-11

我正在尝试在 Java 代码中调用 C 函数。 我有这个哈瓦代码。

public class JavaToC {

    public native void helloC();

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

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

。我编译了它,然后创建了头文件。然后制作以下HelloWorld.c 文件。

#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 or -fPIC.

解决方案似乎是添加-fpic生成与位置无关的代码的选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Java本机接口时如何解决“致命:重定位仍然针对可分配但不可写的部分”? 的相关文章

随机推荐

  • 在 SymPy 中将 ** 替换为 Math.pow

    我有一个 Python 中的 SymPy 表达式 我想将其复制并粘贴到 Java 源代码中 问题是求幂有不同的表示法 Java用途Math pow a b Python使用a b 所以我的问题是 有没有办法以 Java 格式 打印 SymP
  • libgdx 中的背景透明度

    如果我在Android中使用libgdx 如何使屏幕背景透明 我尝试使用的代码不起作用 Gdx gl glClearColor 0 0 0 0 Gdx gl glClear GL10 GL COLOR BUFFER BIT GL10 GL
  • ActionError 未显示

    我想加载我的Error jsp in my ErrorDiv if Action类返回错误 我正在执行 AJAX 调用 JS success function result if result success alert Database
  • Facebook 分享,标题未分享

    转到以下网址 共享消息中未显示标题 我是否正确使用它或者它是 facebook api 中的错误 问候 潘卡伊 我很确定 Google 通过 JavaScript 更改了页面的 Title 属性 如果您查看其搜索结果页面的源代码 您会发现
  • MATLAB:频率分布

    我在一个文本文件中对 500 个数值 范围从 1 到 25000 进行了原始观察 我希望在 MATLAB 中进行频率分布 我确实尝试过直方图 hist 但是我更喜欢频率分布曲线而不是块和条形图 任何帮助表示赞赏 如果将两个输出参数传递给HI
  • 如何在 Symfony2 中设置表单字段的默认值?

    有没有一种简单的方法来设置文本表单字段的默认值 你可以设置默认值empty data builder gt add myField number empty data gt Default value
  • twilio python 模块版本 2.0.8 中缺少 twilio.rest?

    Twilio python 快速入门指南说使用名为 twilio rest 的子模块 但是今天通过安装 twilio 模块后sudo pip install twilio安装了版本 2 0 8 的 twilio 模块中似乎没有名为 rest
  • 如何以编程方式在 EditText 上设置焦点(并显示键盘)

    我有一个布局 其中包含一些如下视图
  • 从 MediaStore 查询播放列表

    我正在尝试从 MediaStore 查询设备中的播放列表 我已经关注了之前提出的问题 但没有得到答案 这就是我查询播放列表的方式 public void addToPlaylist long playlistId Context conte
  • 如何单独显示数字?

    假设我在 matplotlib 中有两个图形 每个图形一个图 import matplotlib pyplot as plt f1 plt figure plt plot range 0 10 f2 plt figure plt plot
  • 来自字典的数据帧,具有自动日期解析功能

    我正在从字典序列创建一个 Pandas DataFrame 这些词典很大而且有些异构 有些字段是日期 我想自动检测并解析日期字段 这可以通过以下方式实现 df0 pd Dataframe from dict dicts df0 to csv
  • 关闭窗口 - 但不停止程序 - JAVA

    在我的程序中 如果发生某个操作 它会打开一个窗口 当我在此窗口中填写信息并输入按钮后 窗口将出现 dispose 该窗口是在我的主程序之外的程序中拾取的 但是当我关闭该窗口时 我的主程序将停止 我怎样才能防止这种情况发生 感谢您的帮助 您可
  • 使用NVM在gitlab-ci中安装特定的nodejs版本

    当我尝试使用 gitlab ci 安装 NVM 时 收到以下错误消息 gitlab ci yml 文件 stages test Testing tags docker stage test image ubuntu 18 04 before
  • 为 Node.js 应用程序构建 docker 映像在代理后面失败

    我在 docker 构建期间遇到了 npm 问题 我是一家公司代理的幕后黑手 阅读了大约 30 篇解决类似问题的文章 以及 stackoverflow 帖子 然而我仍然无法克服这一点 我能够 npm install 项目并在 docker
  • Google Apps 脚本停止从雅虎财经抓取数据

    用于从雅虎财经抓取历史数据的 Google Apps 脚本代码昨天停止工作 它突然给出错误 没有数据 data length 0 我认为错误出现在获取 JSON 时的第 8 行脚本中 但我没有必要的技能来修复它 如果您能帮助解决问题 我们将
  • 将数据框重塑为宽形状

    数据包含两个变量 id 和grade 每个id可以有多个记录 每个年级 dat lt data frame id c 1 1 1 2 2 2 2 3 3 4 5 5 5 grade c a b c a a b b d f c a e f 我
  • phpunit 无法在全新安装的 laravel 5.7 上运行

    我新安装的 Laravel 遇到问题 当我尝试使用时phpunit运行默认命令ExampleTest php 我懂了error D Laravel Rahimi0151 gt phpunit PHP Warning continue tar
  • Maven - 测试中的不同依赖版本

    我遇到了类似的问题Maven 2 测试和编译中的不同依赖版本但那里指定的答案不起作用 在我的项目中 我需要依赖 Hadoop 的 Cloudera 发行版和用于 JUnit 测试的 vanilla 版本 因为前者仅适用于 nix 当我尝试执
  • 根据给定的开放日期和关闭日期,生成一段时间内开放门票的计数

    我有一些门票的一组数据 其中datetime它们打开和关闭的时间 或NULL如果它们仍然开放 opened on closed on 2019 09 01 17 00 2020 01 01 13 37 2020 04 14 11 00 20
  • 使用Java本机接口时如何解决“致命:重定位仍然针对可分配但不可写的部分”?

    我正在尝试在 Java 代码中调用 C 函数 我有这个哈瓦代码 public class JavaToC public native void helloC static System loadLibrary HelloWorld publ