方針
基本的にVisual studio大きいので使いたくない、
基本的にCLIだけで行きたい。
cl
windowsのc++コンパイル
g++
GNU C++ Compilerの意味
//Windows
//コンパイルし、demo.obj, demo.exeが生成する。
cl /EHsc demo.cpp
//Linux
1.Windows
1. 行った結論
色々パス通さんとあかんのやね。
とりあえずコンパイルまでうまくいったので、以下を追加。
//コンパイルのためのcl.exeへのパスを通す
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx64\x64
//システム環境変数にそれぞれ追加する。
INCLUDE
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\
LIB
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\lib\x64\
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64
//コンパイルし、demo.obj, demo.exeが生成する。
cl /EHsc demo.cpp
無事コンパイルできました。
/EHsc は、標準の C++ 例外処理動作を有効にするようコンパイラに指示するコマンド ライン オプションです。 これを行わないと、スローされた例外によって、破棄されないオブジェクトやリソースのリークが発生する可能性があります。
2. 詳細
行った流れ
//以下のようなものが参照できず順次パスに追加した。
//基本的に参照できなかったもののパスを通すだけ。
"libucrt.lib" → Windows Kitsにある
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64
'uuid.lib' → Windows Kitsにある
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64
"crtdbg.h" → Windows Kitsにある
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt
コメント
基本的にx64, x86などでフォルダが分岐していて、どのパスを通すか迷うが、おそらく全パスがVisual Studio導入した際には自動で通されるんでしょう。今回はMSVC-x64系統のみを通した。エラーが生じたら随時追加しようと思います。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools
Llvm
MSVC
の分岐
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin
Hostx64
Hostx86
の分岐など
2.Linux
インストール
$ sudo apt install g++
1.コマンド実行
//オブジェクトファイル生成
> g++ -c main.cpp hello.cpp
//オブジェクトファイルをリンクしてa.outという実行ファイルを生成
> g++ -o a.out main.o hello.o
//オブジェクトファイルは生成されず、直接実行ファイル作成。
> g++ main.cpp hello.cpp
1.静的ライブラリを作成
> g++ -c hello.cpp good_morning.cpp
//静的ライブラリ(.a)の作成
> ar rvs libgreetings.a hello.o good_morning.o
> g++ main.cpp libgreetings.a
2.共有ライブラリを作成
//オブジェクトファイル(.o)の作成
> g++ -fPIC -c hello.cpp good_morning.cpp
//共有ライブラリ(.so)の作成
> g++ -shared hello.o good_morning.o -o libgreetings.so
//main.cppをコンパイルして.soとリンクし実行ファイル.outを作成
> g++ main.cpp -L. -lgreetings -Xlinker -rpath -Xlinker .