Xcode 5.0.1,Mac OS 10.9,尝试使用Qt-Creator 3.0测试版。
我需要使用Qt 5.2和32位第三方库,所以我希望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 :(得分:2)
看来,对于相同的“hello world”.pro文件,我可以从命令行执行此操作:
~/dev/qt5/bin/qmake -spec macx-clang-32 test2.pro
make
它将使用32位(i386)正确构建所有内容。它将与我建立的i386 Qt 5.2正确连接。
HOWEVER:
将相同的.pro文件加载到Qt-Creator 3 beta:并构建 - 它将尝试构建它x86_64,当然在链接上失败。
您可以在命令行中看到差异:当我从命令行执行此操作时添加了“-arch i386”,但是当我从QtCreator 3.0测试版中执行此操作时则不会添加。
查看确切的根本原因:我可以看到,当我使用命令行时,规范是“macx-clang-32”。当我在QtCreator 3.0测试版中使用它时,规范是“macx-clang”。
所以解决方法是:
我在项目构建设置中强制它回到macx-clang-32,我现在可以在QtCreator 3.0中构建32个罚款