2

問題

私は、Visual Studio 2005 で作成された Qt アプリケーションを持っています。これは、すべて 1 の構造体メンバー アライメントでコンパイルされたかなりの量の他のライブラリを使用しています。

これは明らかに、0 (他のライブラリが失敗する) または 1 (Qt が失敗する) 構造体メンバーの配置でアプリケーションをコンパイルすると問題を引き起こします。

私が試したこと

projects.pro ファイルのコンパイラ フラグ

  1. Qtのソースコードをダウンロードしました。
  2. projects.pro ファイルの先頭に以下を追加しました

    QMAKE_CXXFLAGS_DEBUG += -Zp1 QMAKE_CXXFLAGS_RELEASE += -Zp1

  3. Visual Studio コマンドラインを使用して、メイクファイルを作成する configure.exe を開始しました。

  4. Qtをコンパイルするnmakeを開始しました。

これにより、Qt は 0 の構造体メンバーの配置でコンパイルされます。おそらく -Zp1 (/Zp1 も試しました) はコンパイラによって認識されませんが、これは Visual Studio がそのプロパティ ページでそれを使用する方法であるため、これは私を驚かせるでしょう:

構造体メンバーの配置 1

makefile のコンパイラ フラグ

今はほぼ同じことをすることを検討していました:

  1. Qt のソースコードをダウンロードします。
  2. Visual Studio コマンドラインで configure.exe を実行します。

この時点で、構造体メンバーのアラインメント 1 を使用できるように変更できるメイクファイルがあります。ここでは成功しません。

私の質問

Qt for Visual Studio 2005 を構造体メンバーのアラインメント 1 でコンパイルするにはどうすればよいですか?

4

1 に答える 1

1

Qt は、8 (デフォルト) 以外の構造体メンバーのアラインメントをサポートしていません。これを解決する唯一の方法は、次を使用すること#pragma packです。

#pragma pack( [ show ] | [ push | pop ] [, identifier ] , n  )

すべての Qt コードを囲み、プッシュ アンド ポップでインクルードします。

#pragma pack(push, 8)
...
#pragma pack(pop)
于 2013-12-08T20:45:21.570 に答える