google testを32bit向けにビルドしてみる
(ver.1.12.1の場合)
どもです。
今回のエントリでは、最新のgoogle testを32bit向けにビルドしようとしてハマった内容と、その解決方法について書いてみます。
0. 開発環境
今回のエントリの内容は、以下の環境で作業を行っています。
項目 | 内容 |
---|---|
OS | Windows10 Pro(21H1) |
CPU | i7-8700 |
メモリ | 16GB |
IDE | Visual Studio Community 2019 Version 16.11.18 |
また、ビルド対象のコードはRelease-1.12.1のコードになります。
zip形式でダウンロードして、任意の場所に解凍して作業を行っています。
1. cmakeしてみます
まず、cmakeで開発環境を整えます。
環境を整えるためには、以下のコマンドを実行します。
cmakeの各コマンドは、コードを解凍した場所で実行します。
googletest-release-1.12.1>mkdir build
googletest-release-1.12.1>cd build
googletest-release-1.12.1>cmake ..
googletest-release-1.12.1>cmake --build .
実際の実行した際の様子が、以下になります。
また、実行結果は下図のようになります。
ここで、「lib」ディレクトリ内にgoogle testのライブラリファイル(.lib)が生成されています。
ただしこのファイルは、64bit向けです。
今回求めている32bit版ではありません。
2. 32bit向けにビルドしてみる
次に、(試しに)32bit向けにビルドしてみます。
と言ってもやることは…
- .slnファイル(googletest-distribution.sln)をVisualStudioで開く
- ソリューションプラットフォームに、Win32(x86)を追加する
- ビルド実行する
です。
2.1. Win32をプラットフォームに追加
先の手順のうち
2. ソリューションプラットフォームに、Win32(x86)を追加する
ですが、cmake直後のソリューション/プロジェクトには、32bit向けの設定がありません。
そのため、手動で追加する必要があります。
とは言ってもやることは、実に簡単です。
- VisualStudio画面上部から、「構成マネージャ」を開く
- 「アクティブソリューションプラットフォーム」のドロップダウンリストの中から「<新規作成…>」を選択する。
-
表示される「新しいソリューションプラットフォーム」ダイアログにおいて、「新しいぷらっフォームを…」に「Win32」を設定する。
「設定のコピー元」は、(デフォルトのまま)「x64」にする。 -
画面上部のプラットフォーム選択欄から「Win32」(またはx86)を選択します。
なお、ナゼ「Win32」と「x86」の両方が作成されるのか理由は分かりません…。
以上の手順でソリューションプラットフォームにWin32(x86)が追加され、選択可能となります。
2.2. 32bit向けビルドの実行
準備が整ったところで、実際に32bit向けビルドを実行します。
実行すると、以下のようになります。
見ての通り、エラーとなります。
エラーの内容は、
モジュールのコンピューターの種類 'x86’ は対象コンピューターの種類 'x64’ と競合しています。
という内容です。
2.3. 32bit向けビルドのエラーを解消してみる
それでは、ビルド時に発生したエラーの解消に挑戦します。
エラーメッセージの内容から、「コンピュータの種類」の設定が不適切であることが読み取れます。プロジェクトの設定の中で「x86」や「x64」を設定する箇所を調べてみると、次の3つが見つかりました。
- [構成プロパティ]-[詳細]-[詳細プロパティ]-[優先するビルドツールアーキテクチャ]
- [構成プロパティ]-[ライブラリアン]-[全般]-[対象コンピュータ]
- [構成プロパティ]-[ライブラリアン]-[全てのオプション]-[その他のオプション]
これら設定項目の値を確認してみると、2つ目と3つ目の設定項目の値が矛盾しています。
即ち、[ライブラリアン]の「対象コンピュータ」が「MachineX86」になっていますが、「その他のオプション」に「machine:x64」が設定されています。
そこで、「その他のオプション」の設定を「x86」向けに変更します。具体的には、「machine:x86」と設定します。
この設定の変更を、「gtest」と「gtest_main」の両方に対して行います。
設定内容を変更したのちに再度ビルドを実行します。すると、「gtest」と「gtest_main」の両方のビルドが成功します。
実際に出力ディレクトリ(デフォルトでは、「build/Release(またはDebug)」)に、gtest.lib/gtest_main.libが生成されます。
3. まとめ
今回は、google testを32bit向けにビルドしてみました。
デフォルトでは64bit向けビルドのみが設定されていますが、少し設定を変更することで32bit向けにビルドができることが分かります。
最近の開発では、中々32bitアプリケーションを開発、Windows上で実行することはないかと思います。
しかし、だからこそ、いざという時のために32bit向けのビルドをできるようにしておくことは重要なのではないか、と考えます。
ではっ!
ディスカッション
コメント一覧
まだ、コメントがありません