MinGWでHelloWorld(ライブラリ編)
MinGWでライブラリを作成し利用してみた。
入手先
前回まで
MinGWの環境が整ってから、以下のようなHelloWorldシリーズをやった。 しかし、ライブラリの作成はやっていなかった。そこで今回はMinGWでライブラリを作成してみる。
コンパイラ | Console | Windows |
---|---|---|
gcc | ● | ● |
g++ | ● | ● |
ライブラリ | 結果 |
---|---|
GTK+3 | ● |
GTKmm3 | ● |
ライブラリ化の問題
以前、VC++2010でライブラリを作成するとファイルサイズが膨れ上がることが判明した。よってライブラリの作成を断念した経緯があった。じつは他にも以下のような問題があった。
楽するためにライブラリ化したかったのに、逆に仕事が増えてしまいそう。 当面はライブラリ化せねば困るくらいの大規模コードを書けるようになることが先だと思った。
本当はライブラリ化で以下のようなことを狙っていたのに…。
- 部分的に完成させてしまい、コードを見なくていいようにしたかった(ファイル数削減)
- 部分的に完成させてしまい、完成/未完成の切り分けをしたかった
- 部分的に完成させてしまい、コンパイル時間が長大にならないようにしたかった
C#のクラスライブラリがうらやましい。C++使えねーと思っていたら、今回MinGWでclassも使えた!
参考
http://www.mingw.org/wiki/sampledll
そのまんまやっただけ。
ファイル
ソースコード
- example_dll.cpp
- example_dll.h
- example_exe.cpp
バイナリ
- example_dll.o
- example_dll.dll
- libexample_dll.a
- example_exe.o
- example_exe.exe
.dllは動的ライブラリ、.aは静的ライブラリ。
batファイル(コンパイルする)
@echo off
g++ -c -DBUILDING_EXAMPLE_DLL example_dll.cpp
g++ -shared -o example_dll.dll example_dll.o -Wl,--out-implib,libexample_dll.a
g++ -c example_exe.cpp
g++ -o example_exe.exe example_exe.o -L. -lexample_dll
pause
@echo on
コード
example_dll.cpp
example_dll.h
example_exe.cpp
example_exe.exe実行結果
VC++2010<MinGW
- C++のclassがライブラリ化できている
- ファイルサイズが極少
ファイル名 | サイズ(KB) |
---|---|
example_dll.o | 3 |
example_dll.dll | 19 |
libexample_dll.a | 5 |
example_exe.o | 4 |
example_exe.exe | 63 |
ただ、以前はWindowsAPI、今回はGTKmm、まったく異なるライブラリを使っている。コード内容もコード量も違うから正確な比較ではない。
でも何MBにもなってはいない。これくらいなら実用的なお手ごろサイズ。