在 Mac OS X 中链接动态库 (libjvm.dylib)(rpath 问题)

2024-01-09

我确实有一个需要链接的应用程序libjvm(JDK 中的库需要进行 JNI 绑定)。当我说出地点时libjvm.dylib using -L它成功编译和链接。但是,当我运行二进制文件时,我得到:

dyld: Library not loaded: @rpath/libjvm.dylib
  Referenced from: <my home directory>/./mybinary
  Reason: image not found

到目前为止,我发现我可以运行指定 LD_LIBRARY_PATH 的二进制文件,如下所示:

LD_LIBRARY_PATH=<path to libfolder installation> ./mybinary

但我当然不希望这样。如果每次启动应用程序时都必须一次又一次地给出确切位置,为什么我还要指定确切位置?!

我还了解到 mac os x 上的动态库确实会获得一种标记来告诉其位置。然而我不知道什么rpath是(对我来说似乎是一个变量,但如何在链接过程中设置它?)。

该应用程序是使用 haskell 构建的,但我同样可以使用以下命令手动链接对象文件ld。然而,我陷入了 rpath 的困境——它对于 JDK 库来说可能是特殊的吗?

以下是我为了构建而所做的事情:

ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary

来自苹果的dyld 手册页 https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/dyld.1.html:

@rpath/

  Dyld maintains a current stack of paths called the run path list.
  When @rpath is encountered it is substituted with each path in the
  run path list until a loadable dylib if found. The run path stack
  is built from the LC_RPATH load commands in the depencency chain
  that lead to the current dylib load. You can add an LC_RPATH load
  command to an image with the -rpath option to ld(1). You can even add
  a LC_RPATH load command path that starts with @loader_path/, and it
  will push a path on the run path stack that relative to the image
  containing the LC_RPATH. The use of @rpath is most useful when you
  have a complex directory structure of programs and dylibs which can be
  installed anywhere, but keep their relative positions. This scenario
  could be implemented using @loader_path, but every client of a dylib
  could need a different load path because its relative position in the
  file system is different. The use of @rpath introduces a level of
  indirection that simplies things. You pick a location in your directory
  structure as an anchor point. Each dylib then gets an install path that
  starts with @rpath and is the path to the dylib relative to the anchor
  point. Each main executable is linked with -rpath @loader_path/zzz,
  where zzz is the path from the executable to the anchor point. At runtime
  dyld sets it run path to be the anchor point, then each dylib is found
  relative to the anchor point.

你需要通过-rpath path/containing/the/library to ld当链接你的二进制文件时告诉它在扩展时在哪里搜索@rpath/共享库加载命令中的前缀。通过 GHC,您可以使用-optl-Wl让它传递标志的参数ld,所以你需要像这样调用 GHC:

ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -optl-Wl,-rpath,<javahome>/jre/lib/server -o mybinary
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Mac OS X 中链接动态库 (libjvm.dylib)(rpath 问题) 的相关文章

  • 在 Safari for Lion (OS X 10.7) 中设置滚动条颜色

    Lion 中的新滚动条似乎会根据 body 元素的背景颜色调整 Safari 中的颜色 有没有办法手动设置滚动条是深色还是浅色 我知道有 webkit CSS 选项来设置滚动条的样式 这实际上早于新的 Lion 滚动条 我使用该方法的唯一问
  • 如何在 Haskell 中使 CAF 不是 CAF?

    如何将常量应用形式变成 而不是常量应用形式 以阻止它在程序的生命周期中保留 我尝试过这种方法 Dummy parameter to avoid creating a CAF twoTrues gt Bool twoTrues map Tru
  • 使用 librsvg / rsvg 通过 ImageMagick 转换 SVG 图像

    我知道这个问题在这里有几个答案版本 如下所示 ImageMagick 将 SVG 转换为 PNG 无法在启用 RSVG 的情况下工作 https stackoverflow com questions 11592085 imagemagic
  • boost.asio 链接和库

    我是 boost asio 编程的新手 并且在链接 boost 库时遇到困难 我的问题是 当我包含 asio 标头时 如何找出应该链接到我的项目的库 例如我用过 include
  • Haskell 中的所有内容都存储在 thunk 中吗,甚至是简单的值?

    以下值 表达式 函数的 thunk 在 Haskell 堆中是什么样子的 val 5 is val a pointer to a box containing 5 add x y x y result add 2 val main prin
  • 带有存储在文件中的通配符的 grep

    我希望 grep 通过读取需要从文本文件中过滤掉的内容来过滤掉行 这是我给 grep 的内容 它存储在foo txt Users 1337 X Users 1337 R Users 1337 W 这是它应该过滤的内容 它存储在bar txt
  • 如何从远程 ssh 连接上运行的 tmux(复制模式)复制到本地剪贴板

    我通过 OS X 上的 VirtualBox 运行 Linux 我通过在无头状态下运行虚拟机 然后使用端口转发 sshing 到 Linux 机器来实现这一点 现在 无论复制到我的虚拟机上的剪贴板 我都可以粘贴到我的远程 ssh 会话上 但
  • 使用 Parsec 解析正则表达式

    我正在尝试通过实现一个小型正则表达式解析器来学习秒差距 在 BNF 中 我的语法类似于 EXP EXP LIT EXP LIT 我尝试在 Haskell 中实现这一点 expr try star lt gt try litE lt gt l
  • 并行 Haskell - GHC GC 火花

    我有一个正在尝试并行化的程序 带有可运行代码的完整粘贴here http lpaste net 101528 我进行了分析 发现大部分时间都花在findNearest这本质上是一个简单的foldr超过一个大Data Map findNear
  • Android 上的多处理

    我一直在 Android 上执行一些测试 以验证并行化算法 如 FFT 的性能可以提高多少 我通过使用带有 JNI FFTW 的 pthread 和 Java 线程 来自 JTransforms 来实现这些算法 我没有像预期那样通过使用线程
  • 如何让 esqueleto 为我生成 SQL 字符串?

    我怎样才能让esqueleto从a生成一个SQL字符串from陈述 的文档toRawSql说 你可以打开持久的查询日志记录 我尝试了所有可能的形式MonadLogger我可以理解 但它从未打印任何 SQL 同一文档还说 手动使用此功能 是可
  • 优化 Haskell 内循环

    仍在 Haskell 中进行 SHA1 实现 我现在已经有了一个有效的实现 这是内部循环 iterateBlock Int gt Word32 gt Word32 gt Word32 gt Word32 gt Word32 gt Word3
  • 如何在 SceneKit 中以编程方式将 png 纹理包裹在立方体周围

    我是 SceneKit 的新手 试图让一些基本的东西工作 但到目前为止还没有取得多大成功 由于某种原因 当我尝试将 png 纹理应用于 CNBox 时 我最终除了黑色之外什么也没有 这是我在 viewDidLoad 中的简单代码片段 let
  • 与 Functor 不同,Monad 可以改变形状?

    我一直很喜欢以下关于单子相对于函子的力量的直观解释 单子可以改变形状 函子不能 例如 length fmap f 1 2 3 总是等于3 然而 对于单子来说 length 1 2 3 gt gt g往往不等于3 例如 如果g定义为 g Nu
  • Haskell数据类型转换问题

    我目前正在学习 Haskell 并且一直在编写一些非常简单的程序来练习 我的程序之一是 import System IO main do putStrLn Give me year y lt getLine let res show cal
  • 使用默认值压缩而不是删除值?

    我正在 haskell 中寻找一个函数来压缩两个长度可能不同的列表 我能找到的所有 zip 函数都只是删除列表中比其他列表长的所有值 例如 在我的练习中 我有两个示例列表 如果第一个比第二个短 我必须用 0 填充 否则我必须使用 1 我不允
  • 在 macOS 上使用 Swift 3 从剪贴板读取

    我是 Swift 的初学者 我想弄清楚如何在 macOS Swift 3 上读取已复制到剪贴板的内容 我搜索了很多 但似乎找不到任何有效的东西 我从网上尝试过的一些事情 var pasteboardItems NSPasteboardIte
  • 如何在 osx 终端中返回应用程序版本

    我需要在 Mac osX 10 10 上的 sh 脚本中使用应用程序版本 以便我可以与另一个数字进行比较 以便我可以强制更新或不更新 到目前为止我已经有了这个 我使用 Firefox app 作为示例 FirefoxmdlsVersion
  • 为什么我无法在 Mac OS X Terminal.app 上的 Python 解释器中显示 unicode 字符?

    如果我尝试粘贴 unicode 字符 例如中间的点 在我的 python 解释器中它什么也不做 我在 Mac OS X 上使用 Terminal app 当我只是在 bash 中时 我没有遇到任何问题 但在解释器中 python Pytho
  • Cabal 无法安装依赖项,但如果直接询问可以安装它们

    我发现 Cabal 反复出现一个非常奇怪的问题 它影响了我获得可重复的 Haskell 构建的能力 我有一个带有沙箱的阴谋集团项目 如果我做cabal install 我收到以下形式的错误 Y failed during the build

随机推荐

  • 无法读取 Ionic 中未定义错误的属性“清单”

    我正在尝试使用 Firebase 登录 Facebook 我已经安装了所需的所有库并完成了所需的配置 尽管如此 每当我尝试启动我的应用程序时 它都会给我这个错误 node 11160 UnhandledPromiseRejectionWar
  • Rspec 渲染文本

    我有这个代码 if temp user save sign in user temp user render text OK else render text render to string partial gt errors end 我
  • ORACLE 触发器错误

    我有一个性感的触发器 它从字段 REFERENT 中获取值 解析它 在某个视图中找到一行 并将一些数据填充到需要插入的原始行 然后我还重写 REFERENT 字段并消除额外的数据 REFERENT 字段如下所示 XXX 123 其中 123
  • 使一个类的一个实例与另一个类的实例相等。 – 如何取消?

    I have instance1 instance2 如何将它们彼此断开 以便更改其中一个不会影响另一个 编辑 我希望它们引用同一个对象 所以我无法克隆 后来 不是 但我仍然想要该类的两个实例 所以我不能将它们 清空 Thanks EDIT
  • 了解画布和表面概念

    我正在努力理解绘图的过程SurfaceView因此整个Surface Canvas Bitmap系统 用于Android 我已经阅读了所有文章和 API 文档页面 我可以在 android developers 网站上找到它们 一些 and
  • 在android中从类的一些字段创建parcelable

    我有以下课程 我打算将其从一项活动传递到另一项活动 public class Ad extends ListItem implements parcelable private String type private String reco
  • .Net 3.5 上的 Web 服务客户端应用程序的 SSL 和过时的 TLS(1.0 和 1.1)

    根据 PCI 我们需要从 2016 年 6 月 30 日起停止使用 SSL 和 TLS 在某些实施中为 1 0 和 1 1 http blog securitymetrics com 2015 04 pci 3 1 ssl and tls
  • 当数据库日志记录信息应用于每个 Crystal Reports 部分时,应用程序运行缓慢

    目前 我使用以下方法将连接信息分配给所有报告部分 但由于报告中有很多部分 因此报告会在大约 10 秒后显示 这看起来真的很慢 当安装在客户端时 是否有其他方法可以一次性为每个 CR 设置登录信息 JFYI 所有 CR 使用相同的登录凭据连接
  • unique_ptr 具有需要原始指针的 API?

    使用托管内存和函数式语言大约 10 年之后 我终于回到了 C 智能指针让我感到困惑 一半的文档仍然是关于已弃用的auto ptr 我正在尝试实现这个相当简单的项目符号 你好世界 http bulletphysics org mediawik
  • 具有通配符类型参数的 Map 上的 flatMap

    我正在尝试写这样的东西 trait Typed T trait Test def testMap Map Typed Int def test testMap flatMap case typed size gt Seq fill size
  • 如何在Vuex中深度克隆状态并回滚?

    在 Vuex 中 我想拍摄树中对象属性的快照 克隆 修改它 然后可能回滚到以前的快照 背景 在应用程序中 用户可以在应用某些更改之前尝试它们 应用更改时 它们应该影响主 vuex 树 用户还可以单击 取消 放弃更改并返回到之前的状态 Exa
  • 相关查找字段外键在内联 Django 中不起作用

    我的 tabularinline 字段有问题 我有这样的模型 class Product models Model class Pemesanan models Model produks models ManyToManyField Pr
  • axios 在 componentDidMount 中获取数据后如何拍摄笑话快照?

    要测试的组件 class Carousel extends React Component state slides null componentDidMount gt axios get https s3 amazonaws com ra
  • 拖动数据点并提交值

    On page jqPlot http www jqplot com deploy dist examples customHighlighterCursorTrendline html有一个在 jqPlot 图表上拖动数据点的示例 我如何
  • Ajax v. 在 HTML 中包含数据

    我将 JavaScript 与 jQuery 结合使用 与 Django 后端对话 有一些 UI 需求需要 Ajax 因为在用户提供一些输入之前我们无法知道要发送哪些数据 然而 还有其他在模板时已知的数据 直接将该数据包含在模板中而不是使用
  • PHP ↔ Perl 接口或绑定

    您推荐哪种 PHP Perl 接口或绑定 我需要能够从 PHP 脚本运行位于 Perl 文件中的 Perl 函数并获取返回值 我已经找到了PECL perl 包 http pecl php net package perl但我不确定它的可靠
  • 64 位上 int 与 size_t

    将代码从 32 位移植到 64 位 很多地方都有 int len strlen pstr 这些现在都会生成警告 因为 strlen 返回 64 位的 size t 而 int 仍然是 32 位 所以我一直用它们替换 size t len s
  • 如何在提取文本之前识别可能损坏的 pdf 页面?

    TL DR 我的工作流程 下载PDF 使用将其拆分为页面pdftk https linux die net man 1 pdftk 使用提取每个页面的文本pdf转文本 https linux die net man 1 pdftotext
  • nginx 从rails 反向代理到wordpress

    我有一个 Ruby on Rails 应用程序和一个托管在不同 EC2 实例上的 Wordpress 博客 我正在尝试使 Wordpress 博客充当 Rails 应用程序的子文件夹 example com blog 而不是 blog ex
  • 在 Mac OS X 中链接动态库 (libjvm.dylib)(rpath 问题)

    我确实有一个需要链接的应用程序libjvm JDK 中的库需要进行 JNI 绑定 当我说出地点时libjvm dylib using L它成功编译和链接 但是 当我运行二进制文件时 我得到 dyld Library not loaded r