64bit開発環境の設定

下記のツール群を用いてWindows 7 64bit上でc++ 64bit プログラムの開発環境を設定した。

1. C++ 開発環境の準備

Pleiadesはeclipseの日本語環境であるが,64bit c++ 版はコンソール画面に実行結果が表示されないので,Platform版をインストールしたのち,pleiadesからeclipse c++環境をインストールする。

(1) http://mergedoc.sourceforge.jp/からPlatform 64bit Full versionをダウンロードしたのち解凍する。
ここでは,c:\のフォルダー(pleades64)にを移動した。

(2)pleiadesを起動する。
 c:\pleiades64\eclipse\eclipse.exeを起動する。

(3)c++の開発環境をインストールする。
[ヘルプ] > [新規ソフトウェアのインストール]のタブを選ぶ。
「作業対象」の▼をクリックし,選択を「Kepler - http://download.eclipse.org/releases/kepler」にする。
(以下の作業は時間がかかる)
下のウィンドウにインストールできるソフトの一覧が表示される。
「C/C++ 開発ツール」にチェックボタンをクリックし,「次へ」ボタンを押す。
使用条件に同意し,「完了」ボタンを押す。
(C++の開発環境がインストールされ始める。非常に時間がかかる。)

2. コンパイラー,リンカー,ライブラリーの準備

コンパイラー,リンカー,ライブリーはMsys,MinGWのものを利用する。

(1) Msys, MinGWのダウンロード
http://www.geocities.jp/penguinitis2002/computer/programming/MinGW-w64.html

MinGW 64 bit 版を以下からダウンロード。
MinGW-w64 - for 32 and 64 bit Windows
"Files" の "Toolchains targetting Win64" - "Personal Builds" - "sezero_4.5_20111101" から "mingw-w64-bin_x86_64-mingw_20111101_sezero.zip" をダウンロード。

MSYS を以下からダウンロード。
MinGW - Minimalist GNU for Windows
"Files" の "MSYS" - "Base" - "msys-core" - "msys-1.0.11" から "MSYS-1.0.11.exe" をダウンロード。

(2) Msys,MinGWのインストール

http://www.geocities.jp/penguinitis2002/computer/programming/MinGW-w64.html

  1. フォルダ "C:\MinGW" を作成。
  2. "mingw-w64-bin_x86_64-mingw_20111101_sezero.zip" の中の "mingw64" の中身を "C:\MinGW" に展開。
  3. "MSYS-1.0.11.exe" を実行し、MSYS のインストール作業を行う。

MSYS インストールの最後で、コマンドプロンプトが開いていくつか質問される。

  1. はじめの 2 つの質問にはどちらも "y" と入力。
  2. 3 つ目の質問 "Where is your MinGW installation?" には、"C:/MinGW" と入力 (引用符は必要ない)。
  3. なにか言われるが、気にせず Enter キーを押して終了。

(3) lapack,blasのインストール

64bitバイナリのlapack,blasのライブラリとdll(windowsでの実行に必要)をダウンロードする。
http://icl.cs.utk.edu/lapack-for-windows/lapack/ から,visual studio用の64bitファイルをダウンロードする。

ファイルは,liblapack.lib,liblapack.dll,libblas.lib,libblas.dll

liblapack.dllとlibblas.dllは c:\windows\system32 にコピー
liblapack.libとlibblas.libは適当なフォルダー(たとえば c:\pleiades64\lib)にコピー。この2つのファイルとフォルダーは後でpleiadesから参照するように設定する。

pleiadesで作成したexeファイルは,liblapack.dllとlibblas.dllのpathの通ったPCでないと起動しない。

(4) cpplapackのインストール

cpplapackはインクルードファイルだけをダウンロードすればよい。

http://cpplapack.sourceforge.net/のDownloadからcpplapack-2010.03.27.tar.gz をダウンロードし,解凍する。
解凍された [include]フォルダーを適当な場所(例えば,c:\pleiades64\include)にコピーしておく。

(5)pleiadesの設定

pleiadesを起動し,適当なプログラムを作成する。例えば,c++の「実行可能」>[Hello world C++プロジェクト]でよい。

作成したプロジェクトをマウスで右クリックし,「プロパティ] > [設定] から,ライブラリーファイルとパス,インクルードファイルのパスを設定する。


(6) テストプログラムの実行

複素固有値解析の例題をプログラム(以下)を作成し,exeファイルを作成する。
exeファイルが64bitであることを,apec64.exeなどで確認する。

/*
* main.cpp
*
* Created on: 2014/01/14
* Author: shin
*/
/*
* eigen.cpp
*
* Created on: 2011/03/20
* Author: shin
*/

//====================================================================[include]
#include <cpplapack.h>
#include <iostream>
using namespace std;
//=======================================================================[main]
/*! main */
int main(int argc, char** argv)
{
cout << "start";

//// make dgematrix A ////
// CPPL::dgematrix A(3,3),m(2,2),k(2,2);

CPPL::zgematrix m(2,2);
CPPL::zgematrix A(2,2),k(2,2);

double m1,m2,rk1,rk2,ik1,ik2;
complex< double> k1,k2;
/*
A(0,0)=3; A(0,1)=2; A(0,2)=1;
A(1,0)=2; A(1,1)=0; A(1,2)=0;
A(2,0)=4; A(2,1)=2; A(2,2)=1;
*/
m1=0.2*pow(10.0,5);
m2=0.15*pow(10.0,5);
rk1=350*1000*100;
rk2=260*1000*100;
ik1=350*1000*100*0.2;
ik2=260*1000*100*0.2;

k1=complex<double>(rk1,ik1);
k2=complex<double>(rk2,ik2);


m(0,0)=0.2*pow(10.0,5);
m(1,1)=0.15*pow(10.0,5);
m(0,1)=0;
m(1,0)=0;

std::cout << "m=" << std::endl;

std::cout << m << std::endl;

k(0,0)=k1+k2;
k(1,1)=k2;
k(0,1)=-k2;
k(1,0)=-k2;

std::cout << "k=" << std::endl;
std::cout << k << std::endl;

CPPL::zgematrix im = CPPL::i(m);

// std::cout << "inv m=" << std::endl;
// std::cout << im << std::endl;
cout <<"A"<<endl;
A=im*k;

//// make wr wi vr ////
std::vector<CPPL::comple> w;
std::vector<CPPL::zcovector> v;

//// dgeev ////
cout << "dgeev"<<endl;
A.zgeev(w, v);

//// print ////
for(int i=0; i<2; i++){
std::cout << "#### " << i+1 << "th eigen ####" << std::endl;
std::cout << "eigen value(w)=" << w[i] << std::endl;
std::cout << "eigen vector(v)=\n" << v[i] << std::endl;

}

cin.get();

}