1

Xcode 5.0.1、Mac OS 10.9、Qt-Creator 3.0 ベータ版を使用しようとしています。

32 ビットのサードパーティ ライブラリで Qt 5.2 を使用する必要があるため、Qt とアプリを 32 ビットにしたいと考えています。はい、2013 年であることはわかっていますが、今のところ、選択の余地はありません。

Qt 5.2 (ベータ版) を次のようにビルドし、「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 フレームワークと互換性を持たせるにはどうすればよいですか?

ありがとう。

4

1 に答える 1

2

同じ "hello world" .pro ファイルに対して、コマンド ラインからこれを実行できるようです。

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

32ビット(i386)を使用してすべてを正しく構築します。私が構築した i386 Qt 5.2 と正しくリンクします。

でも:

同じ .pro ファイルを Qt-Creator 3 beta: にロードしてビルドします -- x86_64 でビルドしようとしますが、もちろんリンクで失敗します。

コマンド ラインの違いを見ることができます。「-arch i386」は、コマンド ラインから実行すると追加されますが、QtCreator 3.0 ベータ版から実行すると追加されません。

正確な根本原因を見ると、コマンドラインを使用すると仕様が「macx-clang-32」であることがわかります。QtCreator 3.0 beta 内から使用する場合、仕様は「macx-clang」です。

したがって、回避策は次のとおりです。

プロジェクトのビルド設定で強制的に macx-clang-32 に戻すと、QtCreator 3.0 内から 32 をうまくビルドできるようになりました

于 2013-10-31T15:24:58.620 に答える