问题标签 [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 投票
2 回答
2477 浏览

python - Python tk 框架

我有生成以下错误的python代码:

我的一些 Tk 扩展库在编译时链接到 /System/Library/Frameworks 而不是 /Library/Frameworks,我知道 install_name_tool 工具可以将二进制文件重新链接到正确的框架,但我到底需要什么输入终端以解决此问题?

0 投票
38 回答
423642 浏览

macos - dyld:库未加载...原因:找不到图像

尝试运行我在 Mac OS X 中发送的可执行文件时,出现以下错误

我已经安装了 boost 库,它们位于/opt/local/lib. 我认为这个问题与可执行文件有关,它只在它所在的目录中查找,就像我在其中粘贴“libboost_atomic.dylib”时一样,它不再介意它了。不幸的是,它抱怨找不到下一个 boost 库。

有没有简单的方法来解决这个问题?

0 投票
2 回答
728 浏览

macos - 在 Mac OSX 上重定位后修补 Qt 二进制文件的脚本

我正在从源代码构建 qt 5。我想知道在 MacOS 下复制粘贴 qt 二进制文件的最简单方法是什么。如果您在任何 qt 框架上运行 otool,您将看到所有依赖项都使用绝对路径:

当我复制 qt 二进制文件并将我的应用程序与该副本链接时,它可以工作,但一些依赖框架是从旧位置获取的。当我尝试将二进制文件移动到另一台机器时,情况变得更糟。我知道可以使用 install_name_tool 解决问题,但这是很多容易出错的手动工作。我想知道是否有一个脚本可以帮助我?

0 投票
0 回答
1145 浏览

macos - install_name_tool -change 静默失败并忽略 -headerpad_max_install_names 标志

我有一个命令行可执行文件,其中包含指向 dylib 的链接——分发时——不会位于otool -L.

例如,给定一个名为 的二进制文件foo

在我的安装程序中,我有一个安装后脚本试图用来install_name_tool -change解决这个问题,以便foo链接到新位置的 dylib。

例如:

但是这种变化被忽略了,默默地失败了。当我otool -L再次运行时:

没有改变。

我正在编译胖二进制文件并尝试将-headerpad_max_install_names编译标志添加到 32 位 Makefile。这并没有解决问题,因为它install_name_tool -change仍然默默地失败。

我读到它-headerpad_max_install_names在 64 位平台上没有任何作用,但我还是将它添加到 64 位 Makefile 中。可以预见的是,这也没有解决问题。

如何修复我的编译过程,以便最终可以更改链接 dylib 的路径install_name_tool

0 投票
1 回答
631 浏览

macos - Mac OS X Archive (.app) 在测试 Mac 机器上崩溃:EXC_BAD_INSTRUCTION

我正在开发一个 Mac 应用程序,该应用程序在我的开发机器上运行良好。该项目有很多 dylib 文件,我必须使用解决的依赖项

install_name_tool -change

我在上面的命令中使用了@executable_path。完成此操作后,该程序在我的机器上运行良好,当我将 .app 文件移动到测试环境时它失败了..

崩溃的线程:0 调度队列:com.apple.main-thread

异常类型:EXC_BAD_INSTRUCTION (SIGILL) 异常代码:0x0000000000000001、0x0000000000000000

线程 0 崩溃::调度队列:com.apple.main-thread
0 libfreetype.6.dylib 0x001f736b FT_CMap_New + 105

1 libfreetype.6.dylib 0x0022d1a4 tt_face_build_cmaps + 516
2 libfreetype.6.dylib 0x00229f0a sfnt_load_face + 1424
dylib 0x00200cbe tt_face_init + 231
4 libfreetype.6.dylib 0x001f5fb4 open_face + 218
5 libfreetype.6.dylib 0x001f5bf1 FT_Open_Face + 528
6 libfreetype.6.dylib 0x001f59db FT_New_Face + 68

查看粗体字符可以看出问题出在 freetype dylib 中。但为什么会出现问题?我已将 .dylib 文件包含在my_app.app/Contents/Frameworks/目录中。

这是造成问题的原因吗?

0 投票
1 回答
477 浏览

objective-c - Mac OS X - 将可执行文件链接到不同的动态库,同时加载旧的和新的

我有一个用 Xcode 构建的命令行工具,它链接到一些 Apple 框架。

作为“个人实验”(只是想了解一点动态库的工作原理),我试图将可执行文件指向相同框架的不同版本。

例如,假设可执行EXEC使用LIB_A,后者使用LIB_B

我制作了LIB_ALIB_B的副本,将它们放在不同的(较短的)目录路径下。

我曾经otool -L获取依赖项和库的 ID。

然后我使用install_name_toolwith 指令-id更改新LIB_ALIB_B的 ID (基本上只是更改前导路径,因为名称没有更改)。

然后使用指令-change让新的LIB_A指向新的LIB_B并让可执行的EXEC指向新的LIB_A

这样,我认为应该正确地重新创建整个依赖关系树。


install_name_tool没有返回错误并检查可执行文件和新库,otool它们都指向正确的路径。

不幸的是,运行可执行EXEC时,控制台会抛出许多关于类重复定义的错误。就像旧库和新库都被加载一样。

最后一切都因Trace/BPT 陷阱而崩溃:5

例如:

如果我调用

我在执行时看到实际上库被加载了两次。

0 投票
0 回答
93 浏览

xcode - 使用自定义框架编译时出错

我尝试使用外部框架编译我的应用程序。当我执行它时,我收到以下消息:

该框架是在构建阶段添加的,我什至尝试执行

知道我还缺少什么吗?谢谢。

0 投票
0 回答
604 浏览

xcode - Xcode 5.1.1 的 install_name_tool 在哪里

在我的 Mac 中安装 Xcode 5 时,我已经安装了命令行工具。 install_name_tool当时工作正常。

现在,当我尝试使用时,install_name_tool我得到以下错误, malformed object (unknown load command 4) 通过谷歌搜索我发现这个错误是由于命令行工具没有与 OS 或 Xcode 一起更新。所以我去了这里(https://developer.apple.com/downloads/index.action)下载了 10.9 的命令行工具,并在终端上再次尝试,但错误仍然存​​在。

然后我尝试从 5-->5.1.1 更新我的 Xcode,进入Downloads首选项,没有下载命令行工具的选项。我安装了我之前为命令行工具下载的 pkg,但我仍然遇到同样的错误。

install_name_tools 在这个导演中不存在,作为其他类似问题的答案之一建议--->/Applications/Xcode.app/Contents/Developer/usr/bin/

我的问题是,install_name_tool从 pkg 安装后安装在哪里?

0 投票
1 回答
1087 浏览

macos - 如何在 dylib 中创建绝对路径引用?

[免责声明:我正在使用其他人的代码。我从来没有创建过 .dylib,所以我转向 SO]

我正在开发一个创建 .dylib 的发行版。它看起来不错,但是当我链接它时,生成的可执行文件会崩溃:

当我使用 otool 检查可执行文件时,问题很明显:(libstk最后一个条目的下一个)具有相对路径,而不是绝对路径。(顺便说一句,它没有正确设置兼容性或当前版本。)

问题

该发行版使用 g++(而不是 clang)作为其编译器。创建 .dylib 的当前咒语是:

它应该读什么来创建一个具有绝对路径的 .dylib?

更新

出于向后兼容性的原因,我们希望在构建时为 dylib 保留一个相对名称(即,我们不想将 -install_name 参数传递给g++ -fPIC ...命令)。

在构建具有绝对路径名之后,有没有办法调整 dylib?当我在现有文件上运行 otool -L 时,我看到:

我希望第一行是

ps

如果有人像我一样不耐烦,您可以使用install_name_tool一种解决方法来更新可执行文件,如下所示:

...但是每次构建可执行文件时不必这样做肯定会很好。

0 投票
1 回答
1666 浏览

xcode - 让 XCode 设置 @executable_path 来自动查找 dylib

我使用 XCode 5.1.1 构建我的 OSX 应用程序并链接到 .dylib。我已经设置了 Build Phases -> Copy Files 以将 .dylib 复制到 Frameworks 目标中。

当我从 XCode 启动时它工作正常,但是当我从 Finder 双击启动 .app 包时,它抱怨它找不到 XCode 尽职尽责地放置在 Contents/Frameworks 下的 dylib,这可以在 finder 中轻松验证。

我的可执行文件上的 otool -L 显示它正在寻找

我可以通过在我的可执行文件上使用 install_name_tool 轻松解决这个问题,如下所示:

但显然,每次重新构建时都会丢失这种变化。我如何告诉 XCode 首先设置 @executable_path../Frameworks?