2013-03-17 152 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