Loading [MathJax]/extensions/tex2jax.js

2015年8月7日金曜日

コマンドプロンプトからC/C++の64ビット用実行ファイルを作る

WindowsのC/C++開発環境

普段Linuxで開発を行なっている方も場合よってはWindowsでC/C++を試す機会があるかもしれません。
そんな中、Visual Studioの様なIDEを一々起ち上げるのは面倒です。Visual Studioにはclコマンドがありちょこっと試したい場合などに重宝します。

clコマンドはデフォルトでは32bitなので64bitで起ち上げてみます。

環境:
OS: Windows8.1(64bit)
IDE: Visual Studio Community 2015

まずVisual Studioはインストールしておいてください。
Visual Studio Communityはフルで24GBくらいあり個人が使うには恐ろしいほど膨大です。

clコマンド使用するには通常「開発者用コマンドプロンプト」というのをクリックします。
このショートカットはWindows8環境で以下の場所にあります。

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2015\Visual Studio Tools\開発者コマンド プロンプト for VS2015

普通に起ち上げると32bit環境で"C:\VBインストール先\Microsoft Visual Studio 14.0\"が作業フォルダになります。
これを64bit環境でコンパイルしたい場合は、ここに書いてあるとおりvcvarsall.batにamd64という引数をつけて起動させます。

方法: 64 ビットの Visual C++ ツールセットをコマンド ラインから有効にする
https://msdn.microsoft.com/ja-jp/library/x4d2c09s(v=VS.120).aspx

vcvarsall.batの位置は、"C:\VBインストール先\Microsoft Visual Studio 14.0\VC" にあり、コマンドプロンプトから叩けばいいだけです。

ただそこから作業場所を移動させるのが面倒くさいので、バッチファイルに書いてしまいましょう。
notepadを開き


@echo off
rem バッチファイルのある場所に移動
cd /d %~dp0
rem 64bitで起動させる
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"" amd64


と書きます。
そしてそのファイルを「cl64.bat」とでも名前をつけて保存します。
このバッチファイルを作業フォルダにおいておけばそれを叩くだけでその場所をカレントフォルダにした64bit C/C++簡易コンパイラの出来上がりです。

テストソース:
[C]
64test.c

  1. #include <stdio.h>  
  2.   
  3. int main() {  
  4.   
  5.   
  6.  int *pint;  
  7.  int len;  
  8.   
  9.  len = sizeof(pint);  
  10.  printf("size = %d\n", len);  
  11.   
  12.  return 0;  
  13.   
  14. }  

実行:
> cl 64test.c
> 64test
size: 8


[C++]
64test.cpp

  1. #include <iostream>  
  2.   
  3. int main(void) {  
  4.   
  5.  int *pnum;  
  6.  int len;  
  7.   
  8.  len = sizeof(pnum);  
  9.  std::cout << "size: " << len << std::endl;  
  10.   
  11.  return 0;  
  12.   
  13. }  

実行:
> cl /EHsc 64test.cpp
> 64test
size: 8



間違いなく実行されてsize: 8という結果がでたら64bit用の実行ファイルが出来ています。
通常の開発者コマンドプロンプトは32bit用なのでsize: 4という結果になります。

Windows で簡易的に64bit用のC/C++の実行してみたいときに便利です。

0 件のコメント:

コメントを投稿

Pythonで地図空間データを扱う⑤

ベースの地図が出来た所で、他のデータを被せてみます。 国土地理院の  500mメッシュ別将来推計人口データ  を使用します。 同じく神奈川県のデータ  500m_mesh_suikei_2018_shape_14.zip をダウンロードします。 ベースの地図データと同じ場所に展開...