実はHelloWorldのコンパイルもすんなりとは通らなかった。
clangもC++のコンパイルはclang++で行うこと、後はlibgcc_s_dw2-1.dllにパスが通っていないなかった、などということで手間取った。
libgcc_s_dw2-1.dllはMinGW/binに入っていたが、MSYSを通して色々なものが動作していたらしく、パスが通っていなかったのだ。副作用でEclipseで作った実行ファイルが動くようになった。今までGCCでコンパイルしたファイルは動いていたのだから、分からない話だ。
そうして遂にC++11のコンパイルが可能となった。最も簡単な機能はなんだろう。最初に思いついたのは auto であった。null_ptr の方が簡単だったが、思いつかなかった。HelloWorldプログラムに追加して、もはや何がハローなのか分からないプログラムにしてみる。
#include <iostream> #include <string> #include <vector> int main(int argc, char* argv[]) { std::vector<std::string> str_list; for(int i=0; i<2 i++) { std::string temp; std::cin >> temp; str_list.push_back(temp); } std::cout << "Hello " << std::endl; for(auto iter=str_list.begin(); iter!=str_list.end(); ++iter) { std::cout << *iter << std::endl; } return 0; }
さて、重要なのはこれをメモしておくことだ。clangでC++11の機能を有効化してコンパイルするには、次のコンパイルオプションを指定する必要ある。
-std=c++11 もしくは -std=gnu++11
ついでに、実行ファイルを作るには
clang++ -std=c++11 HelloWorld.cpp -o HelloWorld
このままじゃC++11は使えないからオプション指定してね、というようなエラーメッセージは出るのだが、どうしてか、そのものズバリは教えてくれない。
0 件のコメント:
コメントを投稿