2013-03-17 154 views
1

构建一个针对Lion和Mountain Lion的Qt应用程序。构建服务器在Mountain Lion上。我有一个32位的依赖关系,所以我从源码编译Qt 4.8.4与-arch x86。该应用在Mountain Lion上运行良好,但在Lion上启动时崩溃。x86 Qt应用程序在Mac OS 10.7上崩溃(Lion)

这里是堆栈跟踪的顶部:

1 QtGui 0x00c6a3e3 QMacPasteboardMime::~QMacPasteboardMime() + 2443 
2 QtGui 0x00b904e4 QApplicationPrivate::initializeWidgetPaletteHash() + 6394 
3 QtGui 0x00b91420 QApplicationPrivate::initializeWidgetPaletteHash() + 10294 
4 QtGui 0x00c051d0 QApplicationPrivate::construct() + 222 
5 QtGui 0x00c06052 QApplication::QApplication(int&, char**, int) + 100 

取出32位的依赖性和建筑与预先建立的Qt 4.8.4分布解决了这个问题。有人看到这个Qt编译配置有问题吗?

./configure \ 
    -debug-and-release \ 
    -developer-build \ 
    -opensource \ 
    -platform macx-g++ \ 
    -nomake examples \ 
    -nomake demos \ 
    -arch x86 

我也尝试了macx-llvm使spec与相同的结果。任何反馈意见。谢谢!

回答

0

为什么不使用自制软件或官方二进制文件?两者都适合我。

+0

感谢您的建议。我试图让自制软件在32位模式下构建Qt。 Qt公式打开'MacOS.prefer_64_bit?',它只是调用'/ usr/sbin/sysctl -n hw.cpu64bit_capable'。我攻击了'prefer_64_bit?'方法以返回'false',这看起来像'./configure'行包含'-arch x86'一样工作。但是,生成的框架文件仍然是'x86_64'。如果你已经能够获得自制软件在32位模式下构建Qt,那么你是如何做到的? – 2013-03-18 17:22:49

+0

这应该可能是一个评论。 – lpapp 2014-10-20 12:32:01

0

构建Lion兼容的32位QT应用程序时,我经历了相同的行为。我设法通过配置Qt来为10.7使用较旧的SDK来解决这个问题,基本上使构建向下兼容Lion。

首先,我得到了MacOSX10.7.sdk从通过苹果开发者中心的旧版本的Xcode的一部分。最新的狮子那些嵌在DMG的Xcode的4.3.3(xcode_4.3.3_for_lion.dmg),只需安装DMG和/Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs将它们复制到您当前的Xcode或更通用的/Developer/SDKs/MacOSX10.7.sdk

然后,我配置QT(4.8.6在我的情况)与一个额外的SDK参数匹配的SDK的目标位置。

-sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk

0

我建设Qt库4.8.6 win32平台时有类似的问题。经过长时间的调查,我已经找到了Qt bug 27219的解决方案,“这个崩溃可以通过设置: export DYLD_FORCE_FLAT_NAMESPACE = 1来解决。请参阅:“https://bugreports.qt-project.org/browse/QTBUG-27219?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

对于实施细节,请参见:“http://0xced.blogspot.ro/2006/07/dealing-with-outdated-open-source-libs.html” 必须更新到Info.plist文件通过设置DYLD_FORCE_FLAT_NAMESPACE环境变量来强制平面命名空间。这是通过在Info.plist文件中添加以下密钥实现的:

<key>LSEnvironment</key> 
<dict> 
<key>DYLD_FORCE_FLAT_NAMESPACE</key> 
<string>YES</string> 
</dict> 
+0

我自己建议添加上面的“-sdk”选项用于OSX 10.7目标的OSX 10.8版本时就足够了。当从OSX 10.10重建一个新的xcode 6工具链为相同的OSX 10.7目标时,它再次失败,我重新发现了这篇文章。结合您的答案,问题解决了。 – gdh 2015-02-27 13:08:05