如何在 Linux 中进行惰性/延迟加载?

2024-04-07

我在 Windows 上运行得很好——应用程序加载我的插件(C++、Qt),我的插件进行智能搜索以查找已安装的 JRE,相应地设置库搜索路径,然后调用 JVM 中的一个函数来强制 jvm .dll 将在此时加载。 (上一个问题:如何部署混合 C++/Java (JNI) 应用程序? https://stackoverflow.com/questions/9120694/how-can-i-deploy-a-mixed-c-java-jni-application)

现在我正在尝试让它在 Linux 上运行。从我读到的内容来看,延迟链接/加载是默认的,所以我认为它会起作用......似乎并非如此。

我想避免dlopen() and dlsym(), LD_LIBRARY_PATH, ldconfig这个想法是,这个插件的用户不必知道其中任何一个是如何工作的,他们只需将plugin.so放在正确的位置,当它加载时,插件可以智能地找到JRE(或告诉用户安装 JRE)。

这可以做到吗?

EDIT

只是为了清楚...加载插件时出现的错误:“无法加载库 /home/dan/blah/blah/libMyPlugin.so: (libjawt.so: 无法打开共享对象文件: 没有这样的文件或目录)”

EDIT

如果重要的话...这需要在 Ubuntu 10.10 及更高版本、CentOS 5.4 和 OSX 10.6+ 上运行。

在 Ubuntu 10.10 上,我做了apt-get install openjdk-6-jdk然后为了让事情正确运行我必须

export LD_LIBRARY_PATH=
  /usr/lib/jvm/java-6-openjdk/jre/lib/i386:
  /usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:
  /usr/lib/jvm/java-6-openjdk/jre/lib/i386/xawt

(为了易读性换行)

但如果有人安装了不同的 JDK(例如 Sun 的),那么目录可能会有所不同(?)。


Windows 上的智能搜索是如何进行的? Linux 中有几个“正常”的地方值得一看。

很多时候 $JAVA_HOME 环境变量被设置为当前的 JRE。

我无法访问您列出的所有系统,但在某些发行版上,您有一个符号链接 /usr/java/latest 它将指向最新安装的版本。

一般来说,如果安装了 JRE,它可能位于 /usr/lib/jvm*、/usr/java*、/usr/lib/java* 之一,或者可能位于上述 lib64 变体之一。

当然,以上方法很可能会告诉你aJRE。决定使用哪个可能很棘手,但如果您的代码不依赖于最新和最好的,那么可能没问题。

我想,作为要求用户安装 JRE(如果找不到 JRE)的一部分,您可以要求他们设置 $JAVA_HOME,因为这是相当标准的做法。

我不知道有什么方法可以让它在所有发行版上工作,因为部分问题源于 *nix 发行版的本质。然而,我可能缺少一个额外的约定。

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

如何在 Linux 中进行惰性/延迟加载? 的相关文章

  • Clang 使用 -nostdlib 生成崩溃代码

    我正在尝试为可执行文件设置自己的运行时环境 但无法使用 clang v3 4 1ubuntu1 目标 x86 64 pc linux gnu 来生成没有段错误的可执行文件 我已将问题简化为以下内容 如果我有一个文件 crt1 c 除了满足
  • 这个对象的内存会是什么样子?

    我想知道这个类 它的对象 的内存布局是什么样的 class MyClass string myString int myInt public MyClass string str int i myString str myInt i MyC
  • JPA 的 commit() 方法是否使实体分离?

    我现在一直在搜索JPA实体生命周期 但现在 关于实体生命周期存在一些缺失的点 我在 stackoverflow 的一篇帖子中找到了下图 请记住该图已被投票 根据此图 当我们持久化实体时 它就变成了托管实体 好的 没问题 当我们提交时 数据会
  • 将 size_t 变量添加到指针

    我想向指针添加 size t 类型 有些像这样 void function size t sizeA size t sizeB void pointer pointer malloc sizeA pointer pointer sizeB
  • 如何对具有无效值的属性使用 JSON.net 的默认值

    我正在使用 Newtonsoft JSON 库来反序列化来自 Web 服务的响应 问题是某些字段包含无效值 例如 一条记录上的一个字段包含一个 T 表示该字段应该是数字 我想做的是将无效字段的值设置为 null 或其他默认值 我的所有属性都
  • 使用 .NET Core Razor Pages 将文件下载到浏览器

    使用 ASP NET Razor Pages 我尝试将文件下载到浏览器 在页面 html 中 使用这样的链接效果很好 href DownloadableFiles testB csv download newname gt Download
  • Big O 用于有限、固定大小的可能值集

    这个问题 https stackoverflow com questions 12305028 java what is the best way to find first duplicate character in a string引
  • JAXB 是否支持 xsd:restriction?

  • 是否可以允许jenkins访问只有root或某些特定程序可以访问的文件?

    我基本上想做的是允许 jenkins 访问我的 android sdk linux 文件夹和所有子目录 我的老板不想自己更改文件夹的权限 我应该在构建过程中这样做 我见过一些在构建过程中在执行 shell 中运行一些命令的示例 是否可以在该
  • C# SerialPort BaseStream ReadAsync - CancellationToken 从未取消?

    我尝试以异步方式从串行端口读取数据 请记住操作所花费的时间不得超过指定的时间段 我使用的代码 private async Task
  • 使用 lambda 或 Stream API 合并流以生成交替序列

    我有一些按预期返回 Stream 的代码 但也许可以用某种类型的 lambda 或 stream 操作替换它 而不是耗尽 a 中的迭代器while loop 它只是一种交替流中元素的方法first and second当其中一个元素耗尽时停
  • 初学者友好的方法来获取所有文件和目录的列表

    使用 NET 3 0 我得到了下面的方法 它可以正确返回指定目录的所有文件和目录 以及子目录 的集合 如果可能的话 我想将其简化为仅使用我非常熟悉的结构 具体来说 有以下几点我不太清楚 1 IEnumerable
  • 使用 HttpClient 在 java 中进行连接池 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何使用 HttpClient 创建连接池 我必须频繁连接到同一台服务器 值得创建这样一个池吗 是否可以保持 HTTP 连接处于活动状
  • 使用C#在SQL Server上执行sql文件

    我有很多程序 视图 函数等文件 我想在 SQL Server 2005 2008 上的适当数据库中执行这些文件 创建组件 还有一点是我想使用 C 来执行它们 另一点需要提及的是 我希望应用程序也可以在远程 SQL Server 上执行此文件
  • 如何在Windows上启动JBoss AS 7.1.1?

    我是新来的JBOSS 我下载了jboss as 7 1 1 Final zip并解压缩该 zip 文件 然后我转到 bin 文件夹并双击standalone bat 但新的 cmd 窗口在 2 3 秒内打开和关闭 我尝试通过cmd启动服务器
  • Web 服务无法使用 GAC 中的类型创建类型错误

    遇到一个不寻常的问题时 我似乎喜欢做一些不常见的事情 我有一个复合控件 它检查给定的 Web 服务文件是否存在于我的应用程序的根目录中 如果不存在 它会在标记中创建带有必要指令的文件以进行滚动 如下所示 反过来 它被保存到输出中 完成此步骤
  • C# - 平移光标

    我正在 PictureBox 控件中实现大图像的平移 并且设置适当的方向平移光标没有问题 但是 我似乎找不到用于平底锅原点的图像 内部带有箭头的圆圈 我在哪里可以找到它 我觉得image您正在寻找的内容未包含在框架中 每个应用程序都使用自己
  • 为什么浮点数有符号零?

    为什么双打有 0也 0 其背景和意义是什么 0 通常 被视为0 当一个negative浮点数非常接近零 可以考虑0 要明确的是 我指的是算术下溢 http en wikipedia org wiki Arithmetic underflow
  • 如何在 C++ 中打印变量的名称? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中获取变量名称的编程方法 https stackoverflow com questions 1623111 programmatic way to get variable name in c
  • 我如何将 C++ 与 VALA 混合起来

    我需要用 C 编写跨平台的 GUI 应用程序 但由于 C 的大多数 GUI 库都有点乏味 而且我对 C NET 非常熟悉 我发现使用 GTK 的代码 Vala 代码非常有趣 并且与其他方式相比有点容易 那么我该如何将 VAlA 与 C 混合

随机推荐