Edited at

Visual Studio 2013で64ビットバイナリを作成する

More than 3 years have passed since last update.

Visual Studio Community 2013を用いて64ビットバイナリを作成する方法を紹介する.

参照: https://msdn.microsoft.com/ja-jp/library/9yb4317s%28v=vs.120%29.aspx


背景

Unity用ネイティブプラグイン(DLL)は64ビットバイナリとして作成する必要があるため調査.


手順


  1. まずプロジェクトを作成する.http://qiita.com/imura/items/62fe7e09740666a5ea8e を参照.


  2. プロジェクトのプロパティを開く.

    2015-08-02_10h32_42.png


  3. 構成マネージャーを開く.

    2015-08-02_10h37_27.png


  4. アクティブソリューションプラットフォームのプルダウンメニューから<新規作成...>を選択.

    2015-08-02_10h39_10.png


  5. 新しいソリューションプラットフォームダイアログの「新しいプラットフォームを入力または選択してください」メニューから x64 を選択して,OKをクリックする.

    2015-08-02_10h41_10.png


  6. 構成マネージャーの設定は以下のようになる.

    2015-08-02_10h42_59.png


  7. この設定でビルドすると64ビットバイナリが生成される.標準的な設定では,プロジェクトのフォルダ直下にx64フォルダが作成され,その中にReleaseとDebugの各フォルダが生成され,それぞれのフォルダに生成された実行ファイルが置かれる.



実行中のプロセスの調査

Process Explorerを使う.

https://technet.microsoft.com/ja-jp/sysinternals/bb896653

実行するとプロセス一覧が表示される.調べたいプロセスの上で右クリックし,Properties... を選択する.Imageタブのやや下部に「Image: 32-bit」あるいは「Image: 64-bit」と表示される.


32ビットバイナリと64ビットバイナリの違い

開発者にとって影響が大きいのは確保できる最大メモリ量であろう.Windowsの場合,32ビットバイナリでは2GBまでという制約がある(LARGEADDRESSAWAREオプションを設定すると3GB超まで増やせる: https://msdn.microsoft.com/ja-jp/library/wz223b1z%28v=vs.120%29.aspx を参照).

int型,long int型,long long int型,ポインタのサイズを比べてみた.


checksize.cpp

// checksize.cpp

#include <iostream>

int main(int argc, char **argv)
{
int i;
std::cout << "sizeof(int) = " << sizeof(i) << std::endl;

long int li;
std::cout << "sizeof(long int) = " << sizeof(li) << std::endl;

long long int lli;
std::cout << "sizeof(long long int) = " << sizeof(lli) << std::endl;

int *p;
std::cout << "sizeof(int *) = " << sizeof(p) << std::endl;

return 0;
}


32ビットの結果

sizeof(int) = 4

sizeof(long int) = 4

sizeof(long long int) = 8

sizeof(int *) = 4

64ビットの結果

sizeof(int) = 4

sizeof(long int) = 4

sizeof(long long int) = 8

sizeof(int *) = 8