我正在尝试在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/