やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

MinGWでHelloWorld(ライブラリ編)

MinGWでライブラリを作成し利用してみた。

console

入手先

GitHub MEGA Yahoo

前回まで

MinGWの環境が整ってから、以下のようなHelloWorldシリーズをやった。 しかし、ライブラリの作成はやっていなかった。そこで今回はMinGWでライブラリを作成してみる。

HelloWorld試行表
コンパイラConsoleWindows
gcc
g++
GTK+試行表
ライブラリ結果
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実行結果

console

VC++2010<MinGW

以前VC++2010でやったときより格段に小さい。

  • 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にもなってはいない。これくらいなら実用的なお手ごろサイズ。

所感

MinGWにしてよかった。もうVC++2010は完全に卒業できるのではないだろうか。