问题标签 [install-name-tool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
11805 浏览

xcode - 插件包中的 dylib @executable_path 路径问题

我正在开发一个插件包,比如说MyPlugIn.bundle 一个应用程序,比如说BigApp.app这个包需要一个 dylib,比如说MyPlugIn.bundle/Contents/Resources/library.dylib。我已经重新定位了 library.dylib 的路径,就像我对一个简单的应用程序包所做的那样:

但 BigApp.app 无法加载此捆绑包,Mac OS X 的 Console.app 记录以下内容:

似乎 @executable_path没有被 MyPlugIn.bundle 可执行路径替换,而是被BigApp.app 可执行路径替换。

任何解决方法,没有绝对路径,以便它可以在Mac OS X 10.4 (Tiger)上运行?谢谢。

0 投票
2 回答
1233 浏览

c++ - 如何部署依赖于动态库的应用程序?

我正在开发一个使用 GStreamer 库的应用程序。为了简化部署,我想在本地包中收集所有 GStreamer 库。为此,我编写了一个执行以下操作的小脚本:

  • 递归遍历依赖项(使用otool -L
  • 将所有依赖项复制到本地目录
  • 使所有依赖路径相对于@executable_path(使用install_name_tool

(如果您有兴趣,可以查看Ruby 脚本。)

但是,我现在在gst_init调用中看到运行时错误:

仅当我使用本地化库时才会出现这些错误。


在使用 install_name_tool 时是否存在某些“常见陷阱”?有谁知道我做错了什么?如果您需要了解某些细节,请随时询问。

更新
我改变了一些事情:

  • 对于依赖库,我现在只更改 dylib 路径而不是 id(仅使用install_name_tool -change而不是install_name_tool -id)。
  • 对于主库,我设置了相对于可执行路径 ( @executable_name/components/Video.dylib) 的 id 值。

这两个变化使它工作。但是,我还不清楚它为什么起作用。我在理解“id”属性的含义时遇到了一些麻烦。它似乎是路径名形式的标识符。为什么为依赖库更改它会导致运行时错误?我将尝试通过进一步的实验找到这些问题的答案......

0 投票
4 回答
27217 浏览

linux - 构建依赖于共享库的程序后,如何更改共享库的文件名?

我有一个程序,它依赖于一个共享库,它希望在目录结构的深处找到。我想把那个共享库移到一个更好的地方。在 OS X 上,这可以通过 install_name_tool 完成。我找不到 Linux 的等价物。

作为参考,readelf -d myprogram吐出以下释义输出:

(并应要求,ldd myprogram:)

我想将“this/is/terrible/library.so”勘误为“shared/library.so”。请注意,如果程序留在其“构建”位置,相对路径 this/is/terrible/library.so 实际存在的位置,则 ldd 能够找到它,正如您所期望的那样。

我知道 RPATH 并且它不是我想要的,我不需要全局更改搜索路径。

0 投票
1 回答
22189 浏览

macos - 使用 install_name_tool 出了什么问题?

我正在尝试在构建 dylib 后更改它的安装路径。我otool -L用来检查当前路径是什么。然后我做:

我没有收到错误,但没有任何变化。如果我再次检查路径,旧路径仍然存在。此外,新路径比旧路径短很多,所以没有问题,我认为 lib 甚至编译了额外的标志以获得更多文件路径空间。

有任何想法吗?

0 投票
0 回答
2531 浏览

linker - 从 dylib 中删除依赖的共享库?

我知道我可以使用 install_name_tool 的 -change 选项来更改存储在 dylib 中的依赖共享库的名称,但是有没有办法删除依赖共享库,我相信这是一个 LC_LOAD_DYLIB 命令,所以它不会当我在 dylib 上运行 otool -L 时不显示?

0 投票
1 回答
3107 浏览

macos - install_name_tool 什么都不做

我正在准备我的应用程序以在 OSX 上部署。唯一的问题是重新定位共享库。

我将它们全部放在 .app 文件夹本身的框架文件夹中。

我对每个图书馆的尝试都是这样的:

当我再次在我的可执行文件上运行 otool -L 时,没有任何改变。这仍然是输出:

我究竟做错了什么?

0 投票
2 回答
8806 浏览

macos - 如何在构建时修改 .dylib 的安装名称

我正在为 Mac OS X (10.7.1) 上的 C++ 构建google-gflags命令行标志库。构建过程是这样的:

我想在构建时更改生成的共享库的安装名称,install_name_tool之后不再使用。

默认情况下,生成的共享库的安装名称libgflags.dylib是输出路径:

手册页ld(1)有一个-install_name选项,可用于在链接时更改动态库的安装名称。

例如,使用一个虚拟程序:

但是,我无法将此命令行选项与./configure脚本一起使用。我尝试手动设置CFLAGS变量,但这会导致错误:

那么,我是否可以更改由configuremake不使用生成的 .dylib 的安装名称install_name_tool

0 投票
2 回答
27267 浏览

macos - 为什么 Mac Os X 中的 Mach-O 库需要 install_name_tool 和 otool?

我正在使用最新版本的 Xcode 4 开发 Cocoa 应用程序,我想将动态库链接到我的项目 ( dylibs)。

我在某处读到,在我的项目中添加库是不够的,因为我必须运行install_name_toolotool让我的项目使用捆绑在我的项目中的库。

我已经阅读了 的手册页install_name_tool,但我不明白为什么我必须这样做。

图书馆如何运作?对应用程序和库具有指向我机器中特定位置的路径的部分特别感兴趣,例如/usr/local/lib/mylibrary.dylib运行时otool -L

0 投票
1 回答
903 浏览

python - 在 Mac OSX Lion(使用 Xcode)上运行 virtualenv 时出现 install_name_tool 错误

当我尝试使用 python 2.6 运行 mkvirtualenv 时,出现错误:

无法调用 install_name_tool - 您必须安装 Apple 的开发工具

我已经安装了 Xcode。(它实际上已安装,而不仅仅是下载并等待安装)。

命令: which install_name_tool 什么也没给我。为什么我不能调用它?

0 投票
2 回答
4547 浏览

macos - Xcode 4、dylib 和 install_name_tool

我正在尝试让 dylib 在我的 OSX 项目中工作。

我一直在阅读一些示例,特别是这个: Xcode 4 added dylib

但我仍然无法让它工作。

以下是我执行的步骤:

  1. 将 testing.1.dylib 复制到我的 Xcode 项目文件夹中。
  2. sudo install_name_tool -id @executable_path/../Frameworks/testing.1.dylib testing.1.dylib
  3. 冉:otool -L testing.1.dylib并收到以下信息:

    testing.1.dylib:
    @executable_path/../Frameworks/testing.1.dylib(兼容版本 2.0.0,当前版本 2.0.0)
    /usr/lib/libSystem.B.dylib(兼容版本 1.0.0,当前版本 159.1.0)

  4. testing.1.dylib作为框架添加到项目中。(使用带有库选项的链接包)。

  5. 此时,当我编译 testing1.dylib 时并没有像我预期的那样被复制到 .App/Framework 中,所以我手动创建了 Framework 路径并将 testing.1.dylib 复制到它: a) mkdir -p testing.app /Contents/Frameworks b) cp testing.1.dylib testing.app/Contents/Frameworks
  6. 在 Xcode 中,我Runtime Search Paths将 Target 和 Project 都更新为:@executable_path/../Frameworks。

现在我将 testing.app 复制到一个单独的新安装的机器上并尝试运行它。我收到以下错误:

dyld:库未加载:/user/local/lib/testing1.dylib 引用自:/Users/me/testing.app/MacOS/./testing 原因:找不到图像

我错过了什么?

注意:运行 install_name_tool 时,我需要使用 sudo 否则会出现以下错误:

install_name_tool:无法打开输入文件:testing.1.dylib 用于写入(权限被拒绝) install_name_tool:无法在文件中偏移:0:testing.1.dylib 用于写入(错误的文件描述符) install_name_tool:不能在文件中写入新标头:testing.1.dylib(错误文件描述符) install_name_tool:无法关闭写入输入文件:testing.1.dylib(错误文件描述符)