- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在为这个概念苦苦挣扎,我无法真正理解 -change
之间的区别。和 -id
.手册页状态
-id name
Changes the shared library identification name of a dynamic shared library to name. If the Mach-O binary is not a dynamic
shared library and the -id option is specified it is ignored.
-change old new
Changes the dependent shared library install name old to new in the specified Mach-O binary. More than one of these options
can be specified. If the Mach-O binary does not contain the old install name in a specified -change option the option is
ignored.
-change
.假设我有以下结构
Test.App
|_Contents
|_MacOS
| |_test -----> item A
|_Library
|_test_library.dylib --->item B
|_another_library.dylib --->item C
$ otool -L test_library.dylib
test_library.dylib
/some/path/another_library.dylib -->item D
test_library.dylib
取决于
another_library.dylib
现在如果我需要更改
another_library.dylib
的位置我会这样做
install_name_tool -change /some/path/another_library.dylib some/new/path/another_library.dylib test_library.dylib
install-name_tool -id
做,我什么时候使用它?
最佳答案
安装名称
术语安装名称指的是 .dylib
的确切路径。最终用户系统中的文件,以便运行时链接器可以找到并加载动态库。
名称可以是:
.dylib
将嵌入到应用程序包和开发者系统中,它们将预先内置在 /usr/local
中, /opt/local
或其他地方,或者它们将作为应用程序构建的一部分从源代码构建。 .dylib
时的主要问题。已构建,其安装名称被标记为
.dylib
由链接器,这就是在运行时可以找到并加载它的地方。显然这在最终用户系统上不起作用,因为该路径只存在于开发人员的系统上,所以解决方案是使用
install_name_tool
在将应用程序包放在一起时,修改库的安装名称以及引用这些库的可执行文件。
@executable_path
:主可执行文件的完整路径。 @loader_path
: 引用可执行文件的完整路径或 .dylib
. @rpath
:主可执行文件中设置的 RPATH。这也可以使用 install_name_tool
更改。 . TheApp.app/Contents/MacOS/TheApp
中。和图书馆将在
TheApp.app/Contents/Frameworks
所以你会想要使用路径
@executable_path/../Frameworks/Library.dylib
来引用库.
@executable_path/../Frameworks
但是,请使用
@rpath/Library.dylib
引用库.
install_name_tool
有两个主要选项:
-id
: 这将设置
.dylib
的安装名称文件本身,并且当某些内容与
.dylib
链接时,将用作原型(prototype)安装名称。 .您可以在构建
.dylib
后立即“更正”安装名称。 ,但是这是一个不寻常的工作流程,因为图书馆如何知道使用它的环境?
-change
: 这会更改
.dylib
的安装名称在引用可执行文件(或 dylib)中。
-id
名称与
-change
不匹配姓名?没有。
-change
一旦运行时链接器找到
.dylib
,选项是正确的重要选项。那么任务就完成了。
copy_dylibs.py
脚本为您完成这一切。您将其配置为在链接您的应用程序可执行文件后运行,它会查看您的可执行文件以递归查找
.dylib
要复制到应用程序包中的文件。然后修复它们的安装名称,保留原来的
.dylib
单独的文件。
关于xcode - install_name_tool -change 和 -id 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35220111/
我正在准备在 OSX 上部署我的应用程序。 唯一的问题是重新定位共享库。 我将它们全部放在 .app-folder 本身的 Frameworks-folder 中。 我为每个图书馆尝试的东西是这样的:
尝试在 10.7 上使用 virutalenv 版本 1.6.4(撰写本文时的最新版本),Lion 是从 mac 应用商店安装的 Xcode 4,但我收到以下错误消息: New python exec
我正在尝试添加 OPN 框架,以添加对从 Opticon 手持扫描仪设备导入批处理的支持。我将框架添加到项目中 在复制构建阶段添加它 并添加了运行路径搜索路径 我一开始得到的完整错误是这个: dyld
我正在尝试让 dylib 在我的 OSX 项目中运行。 我一直在阅读一些样本,特别是这个: Xcode 4 adding dylib 但我仍然无法让它工作。 以下是我执行的步骤: 将 testing.
我正在运行 OS 10.7.4,但找不到 install_name_tool。我通过 App Store 安装了 Xcode 4.3.3。有谁知道我在哪里可以找到/获得 install_name_to
我一直在为这个概念苦苦挣扎,我无法真正理解 -change 之间的区别。和 -id .手册页状态 -id name Changes the shared libra
在将操作系统更新到 El Capitan 后,我正在尝试编译我的 C++ 项目。然而,我在此过程中遇到了一些障碍: dyld: Library not loaded: pathB/libIceUtil
概括 将可执行文件与 dylib 链接时,是 install_name_tool使 dylib 路径相对于可执行文件的唯一方法,或者在 clang 的链接步骤中是否有这样做的方法? 设置 鉴于以下项目
我需要使用 install_name_tool 重新链接文件.有问题的文件让我更改了 dylib 路径之一,但是当我更改第二个(共 7 个)时,出现此错误: install_name_tool: ch
我有一个安装在 /PATH/lib 中的动态库 libtest.dylib,以及一个执行二进制文件 myapp,它使用安装在 /PATH/bin 中的 dylib >。 我可以运行 myapp 来查找
我在为 Mac OS X 打包 Qt 应用程序时遇到问题。 我已经阅读了 Deploying an Application on Mac OS X 上的文档但我仍然不确定我做错了什么。 在我的 Mac
我正在使用最新版本的 Xcode 4 开发 Cocoa 应用程序,我想将动态库链接到我的项目 ( dylibs )。 我在某处读到,在我的项目中添加库是不够的,因为我必须运行 install_name
当我尝试使用 python 2.6 运行 mkvirtualenv 时,出现错误: 无法调用 install_name_tool -- 你必须安装 Apple 的开发工具 我已经安装了 Xcode。
我是一名优秀的程序员,十分优秀!