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向けにビルドしてみます。
と言ってもやることは…

  1. .slnファイル(googletest-distribution.sln)をVisualStudioで開く
  2. ソリューションプラットフォームに、Win32(x86)を追加する
  3. ビルド実行する

です。

2.1. Win32をプラットフォームに追加

先の手順のうち

2. ソリューションプラットフォームに、Win32(x86)を追加する

ですが、cmake直後のソリューション/プロジェクトには、32bit向けの設定がありません。
そのため、手動で追加する必要があります。
とは言ってもやることは、実に簡単です。

  1. VisualStudio画面上部から、「構成マネージャ」を開く


  2. 「アクティブソリューションプラットフォーム」のドロップダウンリストの中から「<新規作成…>」を選択する。



  3. 表示される「新しいソリューションプラットフォーム」ダイアログにおいて、「新しいぷらっフォームを…」に「Win32」を設定する。
    「設定のコピー元」は、(デフォルトのまま)「x64」にする。



  4. 画面上部のプラットフォーム選択欄から「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向けのビルドをできるようにしておくことは重要なのではないか、と考えます。

ではっ!