Big*_*ack 13 macos xcode dylib dyld xcode4.2
我有一组项目,我正在编译为动态库.这些.dylib中的每一个都依赖于我想要放置在各种其他目录中的其他各种.dylib(即一些在可执行路径中,一些在加载器路径中,一些在固定路径上).
当我运行otool -L
已编译的库时,我得到了这些依赖项的路径列表,但我知道如何设置/确定这些路径.它们几乎都是伪随机的.我花了几个小时搞乱Xcode中的"Build Settings"来尝试更改这些路径(w/@ apath,@ executable_path,@ download_path等),但我似乎无法改变任何东西(通过运行检查otool -L
) .我甚至不完全确定在哪里添加这些标志并且不能真正理解以下内容之间的区别或如何正确使用它们:
链接 - "动态库安装名称"
链接 - "运行路径搜索路径"
链接 - "其他链接标志"
搜索路径 - "库搜索路径"
当我运行install_name_tool -change
各种库时,我能够成功更改运行路径搜索路径(再次通过运行otool -L
确认验证).
我正在运行Xcode 4.2,我非常接近放弃,只是使用运行install_tool_name的后期构建脚本来进行更改.但它是一个kludge hack修复,我宁愿不这样做.
在哪里可以看到如何设置dylib依赖项的搜索/运行路径?
任何人对我可能做错了什么都有任何想法?
Kur*_*vis 12
通常,在我的dylib目标中,我将INSTALL_PATH
"安装目录"设置为我想要的前缀(例如@executable_path/../Frameworks
).
我将LD_DYLIB_INSTALL_NAME
"动态库安装名称"设置为其默认值,即$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)
.
例如,Xcode会根据您的目标名称对其进行扩展,因此最终可能会出现这种@executable_path/../Frameworks/MyFramework.framework/Versions/A/MyFramework
情况.
要实现的重要一点是,安装路径内置于 dylib中,作为其构建过程的一部分.稍后,当您链接引用A.dylib的B.dylib时,A.dylib的安装路径将被复制到 B.dylib中.(这otool
就是向您展示的内容 - 那些复制的安装路径.)因此,最好首先在dylib中获得正确的安装路径.
在尝试让所有dylib一起工作之前,请分别检查每个dylib.构建它,然后otool -L
在构建的dylib上.每个架构的第一行应该LD_DYLIB_INSTALL_NAME
是向您展示的内容.
一旦你有条理,尝试让dylib相互链接.它应该更加直截了当.