为什么macdeployqt会出错“无法打开输入文件”?

时间:2012-05-12 03:23:52

标签: macos qt

当我在.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

Enite log: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"

3 个答案:

答案 0 :(得分:0)

通过降级到旧的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

答案 1 :(得分:0)

我认为macdeployqt中存在权限问题。 我用sudo解决了:

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

答案 2 :(得分:0)

从您的错误消息中,您正在使用的libcrypto似乎链接到本地​​文件系统上的libz。您需要做的是确保捆绑包的Frameworks目录中有一个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

如果你的二进制文件链接到丢失的库,通常会导致崩溃。

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