我正在尝试在Mac上构建/运行/部署Qt应用程序。除其他依赖项外,它还有一个我已放置在lib文件夹中的sdk ...,并在pro文件中设置了路径。该应用程序构建良好,但我无法执行它。

针对此特定sdk,运行otool -L myapp显示:

@executable_path/../Frameworks/blah.0.dylib

如果我可以将dylib复制到“/usr/local/lib/”之类的文件夹中,则可以使它工作,但我认为...但没有管理员权限。

没有管理员权限,我无法搜索系统以查看其可能的位置...但是奇怪的是,即使没有管理员权限,我也可以ls /Libraries/Frameworks,并且目前仅包含Qt框架。 ls /Frameworks告诉我/Frameworks不存在。 Frameworks也不(相对于应用程序目录)

dylib放在与我的应用程序相同的文件夹中不起作用(我猜mac机不是Windows大声笑)。我正在寻找alternatives,但还需要部署此应用程序,因此我必须执行install_name_tool才能说服链接器dylib在我正在创建的包中。

就我从qt-4.8/deployment-mac.html页上了解的问题而言,问题是我需要应用程序的原始位置-原始ID。
mkdir myapp.app/Contents/Libraries
cp lib/blah.0.dylib myapp.app/Contents/Libraries
install_name_tool -id @executable_path/../Libraries/blah.0.dylib myapp.app/Contents/Libraries/blah.0.dylib
install_name_tool -change path/to/blah.0.dylib @executable_path/../Libraries/blah.0.dylib myapp.app/Contents/MacOs/myapp

因此,问题是:对于第四步,我对path/to/blah.0.dylib使用什么?我想这是链接器认为现在的路径...但是我怎么问他?另外...由于先前的ID名称中带有“Frameworks”,我可以将其替换为“Libraries”吗?

编辑:向前迈出的一步:
install_name_tool -change myapp.app/Contents/Frameworks/blah.0.dylib @executable_path/../Libraries/blah.0.dylib myapp.app/Contents/MacOs/myapp

上面的地址现在正确了...但是它不起作用。

将blah.0.lib放在Frameworks文件夹中将使链接程序可以找到它。但是install_name_tool似乎无法更改该路径。

奇怪的是,install_name_tool能够更改链接程序的某些路径,但不能更改其他路径-并在名称上输入错字(对于最初没有定义ID的其他lib依赖项),我无法更改...

如何删除这样的链接器路径?设置后如何更改路径?

最佳答案

您的应用是打包的,
您的应用是一个称为 bundle 包的特殊软件包。
您的应用程序 bundle 包是一个目录...

YourApp.app/
       Contents/
            Resources/
                         <images, plists, core data models, etc.>
                MacOS/
                          yourApp  <-- this is the actual executable
           Frameworks/ <- optional frameworks directory
                          blah.dyld goes here

@executable_path扩展为MacOS/yourApp是什么
动态链接器随后会在YourApp.app/Contents/Frameworks/...中寻找您的Dyld,但我认为它不存在,因此您需要添加一个构建阶段以将其复制到那里。

关于c++ - Qt应用程序具有对Mac的依赖关系-依赖的sdk在otool列表中具有@executable_path ...如何更改它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26552956/

10-11 23:05
查看更多