C++

msys2とC++で特定のDLLに依存しないwindowsバイナリを作る

(7/29更新) 背景 msys2上のC++コンパイラでwindowsバイナリを作り、エクスプローラから実行すると以下のように実行できないことがある。 これはエクスプローラの環境変数(PATH)に/mingw64/binが通っていないため起こるが、PATHを通さずとも実行できるように…

変数の宣言と定義

C++

extern int x; // 宣言 int x; // 宣言と定義(未初期化 class C { static int x // 宣言 }; 複数のソースファイルで int x; のように定義すると、リンクは通るが言語の仕様としては正しくない。(コンパイラがよしなにやってくれているだけ) 参照 Definitions…

ヘッダファイルを分ける理由

C++

ヘッダファイルに定義も書くと、ライブラリを公開する時ユーザーにコンパイルさせることになってしまう。よってヘッダには宣言だけ書いて定義はソースでするべき。(宣言さえあれば名前解決できるから) ただし関数テンプレートを使う場合は、実装もヘッダファ…

コンパイラ等のメモ

コンパイルオプション オプション 意味 -I ヘッダファイルの検索ディレクトリを追加 -L リンカの検索ディレクトリを追加 -l リンカでライブラリファイルをリンクする gcc -L./ -lhoge ./フォルダをライブラリ検索パスに追加し、hogeライブラリをリンクする M…