问题标签 [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 回答
2174 浏览

macos - 使用 Mac OS X 应用程序部署 GStreamer 框架的最佳方式是什么?

所以 1.0+ 的 GStreamer 文档似乎......至少可以说是缺乏。GStreamer SDK 有一些有用的提示,但不幸的是它们不够用。

所以,这就是我所做的。我在/Library/GStreamer.Framework/中构建了一个调用 GStreamer 的应用程序

我使用命令行工具构建。这是我可以构建此应用程序的唯一方法。我不能使用 XCode GUI。

我想将此应用程序提交到商店,但这样做我不能将它作为一个包提交(因此我可以捆绑 GStreamer 包安装程序),这意味着我必须将 GStreamer.framework 与我的应用程序捆绑在一起。

在上面的 GStreamer SDK 文档中,您会注意到一个名为 osxrelocator.py 的工具。这很棒,因为它将/Library/GStreamer.Framework的所有引用更改为@executable_path/../Frameworks/GStreamer.framework/

不幸的是,所有 GStreamer .dylibs 都有一个问题......您需要使用 install_name_tool -id 来更改他们的路径,因为 install_name_tool -change 不会改变他们自己的路径!

因此,例如使用 otool:

然后使用 osxrelocator.py(调用 install_name_tool -change):

给出:

请注意 .dylib 引用自身的第一行?这不会更改为 @executable_path/../Frameworks/GStreamer.framework/ 除非您调用 install_name_tool -id。GStreamer 框架中的每个 .dylib 都会发生这种情况!有数百个,我敢肯定手动执行此操作肯定会导致错误。

希望我已经把我的问题说清楚了。有人对该怎么做有任何建议吗?

谢谢!

0 投票
1 回答
5398 浏览

xcode - XCodebuild 指定目标并链接框架

我有一个项目,我需要生成两个可执行文件,一个是 64 位 (x64_86),另一个是 32 位 (i386);它们不能组合。

该项目包括链接到第 3 方框架。

XCode 中的编译没有问题。

单独使用 xcodebuild(不传递参数)时,64 位二进制文​​件按预期构建,并且第 3 方框架与正确的引用链接。使用 otool -L 显示

@rpath/Frameworks/ thirdpartybundle.framework /Versions/A/ thirdpartybundle

但是,当我编译 32 位二进制文​​件时,引用的框架是错误的,并且 otool -L 显示:-

@rpath/Frameworks/ mytool32.framework /Versions/A/ mytool32

其中“ mytool32 ”是传递给 xcodebuild 的产品名称。我尝试使用以下命令构建 32 位版本:-

我也试过这个: -

无论哪种方式,它们都会生成一个带有错误框架路径的二进制文件,用产品名称代替框架名称。

如何使用 xcodebuild 构建 32 位版本,指定产品名称,但使用第三方框架的正确路径?

0 投票
1 回答
5984 浏览

macos - clang,在链接时更改依赖的共享库安装名称

相关,但不回答问题:

在 OSX 上,我有一个由打包管理器提供的动态库,安装在一个非标准目录中,其中 install_name 只是文件名。例如:

不想使用install_name_tool -id.

现在我将一个程序与库链接,例如:

程序无法运行:

因为:

我可以更改依赖库的路径:

所以:

程序可以执行:

是否有可以添加到命令中的 clang 选项:

避免不得不运行:

注意:我不想修改DYLD_LIBRARY_PATH或其他此类环境变量。

?

0 投票
1 回答
2626 浏览

ld - install_name_tool 不能使用更改“因为较大的更新加载命令不适合”

我需要用install_name_tool. 有问题的文件让我更改了 dylib 路径之一,但是当我更改第二个(共 7 个)时,我收到此错误:

谷歌搜索后,我发现文件中的新路径根本没有足够的空间,我也许可以使用该ld工具或libtool修复此问题。但是,我无法弄清楚如何。我没有这个库的源代码,所以我无法重新编译它。

我有什么办法可以更新这个文件的所有 dylib 路径吗?任何帮助将不胜感激!


我在 osx 10.10 我正在使用的命令:install_name_tool -change old/dylib/path.dylib new/dylib/path.dylib file/to/update

0 投票
1 回答
1918 浏览

python - 为 Python 导入 MySQL 包时出错

我正在尝试使用 python 导入 MySQL 模块,更具体地说是 Flask,尽管我收到了一个错误。我在我的应用程序中使用虚拟环境。这是错误:

我可以在它说的错误中看到Library not loaded: /Library/Python/2.7/site-packages/_mysql.so。由于我使用的是虚拟环境,因此路径不正确。应该是/lib/python2.7/site-packages/_mysql.so

有没有办法改变这个?谢谢。

编辑:

我发现 OSX 上有一个终端命令可以更改库位置:

虽然在按回车后我得到了这个:

我似乎没有输入错误的命令,这是什么问题?

0 投票
1 回答
769 浏览

xcode - install_name_tool 没有做任何改变?

我的应用需要加载一个硬件制造商提供的 dylib。在 dylib 上使用 otool 会产生以下输出:

而且我想将@executable_path/../Addittional/更改为@executable_path/../Frameworks/这实际上更短,所以它应该适合。但是当我运行时:

然后什么也没有发生,没有任何变化,otool 的输出与以前相同。

我哪里错了?

0 投票
1 回答
1122 浏览

xcode - 将 dylib 包含到 OS X 框架中

今天,我正在尝试制作 mediainfo 库的 Objective-C 包装器。我还编写了两个演示项目(一个用 Objective-C 编写,另一个用 Swift 编写)。

我想将 mediainfo 的 dylib 包含到框架包中,以便用户看不到它。我的意图是创建一个可以在我的其他 Xcode 项目中拖动的框架。

我尝试使用 install_name_tool 和 otool 来定位 dylib 的路径,但没有任何反应。应用程序无法加载 dylib 或 Xcode 崩溃。

代码可在GitHub上找到。我尝试使用 Xcode 7 进行编译,但在编译示例应用程序时它会崩溃,但当我只编译框架时它不会崩溃。

0 投票
1 回答
3351 浏览

macos - 使用 install_name_tool 修复 dylib 文件中的路径

在将操作系统更新为 El Capitan 后,我正在尝试编译我的 C++ 项目。但是,我在此过程中遇到了一些障碍:

问题是那pathB不存在。当我跑步时otool -L pathA/libIceUtil.34.dylib,我得到

install_name_tool -change pathB/libIceUtil.34.dylib pathA/libIceUtil.34.dylib pathA/libIceUtil.34.dylib没有解决问题。一篇文章提到使用libtool. 知道如何解决这个问题吗?

0 投票
1 回答
569 浏览

c++ - “dll-path”在构建boost时没有效果

我的目标是通过在编译 boost 时提供dll-path选项来在编译的 boost 库中拥有完整的运行路径:

但是,当我检查$(pwd)/build文件夹中的库时,我得到了这个:

即,而不是具有库名称的完整路径,只有库名称(libboost_system.dylib)。应该如何使用dll-path选项或者是否有“官方”方式来实现这一点(除了install_name_tool在每个库上手动运行脚本)?

0 投票
1 回答
7062 浏览

macos - dylib 库路径并在应用程序中使用它

我想在 Mac OS X El Capitan (10.11.x) 中创建一个库,并通过 qt creator 在另一个应用程序中使用它,所以我在 qt 中使用以下设置创建了一个简单的库:

如您所见,我在 MyFrm 框架中创建了“DynminLinkingLib”库;之后,我创建了一个 Qt 应用程序来使用该库。

当我在 qt 中运行我的应用程序时,它给了我这个错误:

为了解决 Qt 项目中的这个错误,我将DYLD_LIBRARY_PATH变量设置为/System/Library/Frameworks/MyFrm.framework/dylib并且它运行良好,但是当我运行捆绑应用程序时它不起作用并给我这个错误:

在此处输入图像描述

这是因为“libDynminLinkingLib.1.dylib”不在应用程序路径中。

我有两个问题:

  1. 我知道如何解决这个问题,install_name_tool但我想在 qmake 和 .pro 文件中解决这个问题。那么如何通过 pro config 文件解决这个问题呢?

  2. DYLD_LIBRARY_PATH在 El Capitan,出于安全原因,我无法使用。为了使用它,我必须停用 SIP(​​系统完整性保护)。那么有什么方法可以在不停用 SIP 的情况下使用 DYLD_LIBRARY_PATH 吗?