为什么 macdeployqt 会给出错误"can't open input file"?



当我在.app上运行macdeployqt时,它会添加库,但是当您尝试启动它时,应用程序会崩溃。这在Mac OS X 10.7上工作正常,但在Mac OS X 10.8 DP3上没有乐趣。为了安装Qt,我使用了port install qt4-mac(但是,我可能在Qt网站上的10.7机器上安装了旧版本的Qt)。

命令:macdeployqt bin/Synergy.app -verbose=3

引点日志:http://pastebin.com/i37vadB7

Log: Using install_name_tool: 
Log:  in "bin/Synergy.app/Contents/Frameworks//libcrypto.1.0.0.dylib" 
Log:  change reference "/opt/local/lib/libz.1.dylib" 
Log:  to "@executable_path/../Frameworks/libz.1.dylib" 
ERROR: "install_name_tool: can't open input file: bin/Synergy.app/Contents/Frameworks//libcrypto.1.0.0.dylib for writing (Permission denied)
install_name_tool: can't lseek to offset: 0 in file: bin/Synergy.app/Contents/Frameworks//libcrypto.1.0.0.dylib for writing (Bad file descriptor)
install_name_tool: can't write new headers in file: bin/Synergy.app/Contents/Frameworks//libcrypto.1.0.0.dylib (Bad file descriptor)
install_name_tool: can't close written on input file: bin/Synergy.app/Contents/Frameworks//libcrypto.1.0.0.dylib (Bad file descriptor)
" 
ERROR: "" 
Log: 
Log: Deploying plugins from "/opt/local/plugins" 
Log: Created configuration file: "bin/Synergy.app/Contents/Resources/qt.conf" 
Log: This file sets the plugin search path to "bin/Synergy.app/Contents/PlugIns"

通过降级到我闲逛的旧Qt SDK来解决.dmg(qt-sdk-mac-opensource-2010.03.dmg)。我还运行了sudo port uninstall qt4-mac来删除新的SDK。

所以看起来最新版本的Qt有一个坏macdeployqt应用程序。

所以这是我现在拥有的Qt版本,它可以工作:

$ qmake -version
QMake version 2.01a
Using Qt version 4.6.3 in /Library/Frameworks

我认为macdeployqt中存在特权问题。我通过使用sudo解决了:

sudo -s -- 'macdeployqt myapp.app; chown -R $(USER) myapp.app'

从您的错误消息来看,您正在使用的 libcrypto 似乎链接到本地文件系统上的 libz。您需要做的是确保捆绑包的框架目录中有一个 libz 的副本,然后使用 install_name_tool 更改捆绑包中版本的路径。

install_name_tool -change /opt/local/lib/libz.1.dylib @executable_path/../Frameworks/libz.1.dylib bin/Synergy.app/Contents/Frameworks//libcrypto.1.0.0.dylib

如果您的二进制文件链接到缺少的库,则通常会导致崩溃。

在Qt的最后几个版本中,macdeployqt更改存在一些问题,因此您必须检查链接路径。

相关内容

最新更新