2013-10-30 37 views
1

Xcode 5.0.1,Mac OS 10.9,試圖使用Qt-Creator 3.0 beta。強制Qt「Hello World」應用程序構建32位 - 比看起來更難

我需要在32位第三方庫中使用Qt 5.2,所以我希望Qt和我的應用程序都是32位。是的,我知道這是2013年......但現在我無法選擇此事。

我用以下做了Qt 5.2(beta),做了「make」和「make install」。一切都好。

./configure -debug-and-release -commercial -confirm-license -nomake examples -platform macx-clang-32 -arch x86 -no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci -no-sql-odbc -no-sql-psql -no-sql-symbian -no-sql-symsql -no-sql-tds -prefix ~/dev/qt5 

現在我想通過構建一個簡單的「Hello World」應用程序來測試Qt 5.2。但即使強硬我的Qt是爲32位構建的,即使設置了Qt版本和工具包,並且我正在使用「Clang(/ usr/bin中的x86 32位)作爲我的編譯器,我得到的鏈接錯誤我的「Hello World」應用正在建造的x86_64的

首先我得到警告:

"...QtGui.framework/QtGui, file was built for i386 which is not the architecture being linked (x86_64)... QtWidgets.framework/QtWidgets, file was built for i386 which is not the architecture being linked (x86_64)...... etc" 

然後,我發現了自己的錯誤:

Undefined symbols for architecture x86_64: 
    "qt_assert(char const*, char const*, int)", referenced from: 
     QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::operator->() const in moc_mainwindow.o 
    "QArrayData::deallocate(QArrayData*, unsigned long, unsigned long)", referenced from: 
     QTypedArrayData<unsigned short>::deallocate(QArrayData*) in mainwindow.o 
    "QStatusBar::QStatusBar(QWidget*)", referenced from: 
     Ui_MainWindow::setupUi(QMainWindow*) in mainwindow.o 
    "QMainWindow::addToolBar(QToolBar*)", referenced from: ..... etc 

我嘗試添加該到我的* .Pro文件中:

CONFIG += qt x86 
CONFIG -= x86_64 

但它仍然試圖構建X86_64。

如何強制我的hello-world應用程序構建32位,並與我構建的32位Qt框架兼容?

謝謝。

+0

建立32細請嘗試使用一個簡單的程序改爲qmake。如果可行,那麼XCode IDE集成就存在問題。 –

+0

我沒有使用Xcode IDE。我正在使用Qt Creator 3 – JasonGenX

+0

好的,在這種情況下,檢查生成的Makefile。在'CFLAGS','CXXFLAGS'和'LFLAGS'中應該有'-arch i386'。如果沒有,請手動插入並查看是否修復它。如果是的話,這可能是一個錯誤。也許它沒有選擇正確的mkspec。試着用'qmake -spec macx-clang-32'強制它。 –

回答

2

它的出現,對於相同的「hello world」 .pro文件,我可以從命令行執行此操作:

~/dev/qt5/bin/qmake -spec macx-clang-32 test2.pro 
make 

它將使用32位(I386)建立正確的一切。它將正確連接我建立的i386 Qt 5.2。

但是:

負載相同.pro文件到Qt造物主3測試:和建設 - 它會嘗試構建它x86_64的,當然失敗的鏈接。

您可以在命令行中看到不同之處:「-arch i386」是在從命令行執行時添加的,但不是從QtCreator 3.0測試版執行時添加的。

看看確切的根本原因:我可以看到,當我使用命令行時,規範是「macx-clang-32」。當我在QtCreator 3.0 beta中使用它時,規範是「macx-clang」。

因此,解決方法是:

我迫使它回到了項目生成設置的MacX - 鐺 - 32,我現在可以從內部QtCreator 3.0