やってみる

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

MinGWでGTK+3のHelloWorldコードをコンパイルするも失敗

HelloWorldのソースコードコンパイルできなかったログ。

前回まで

前回、WindowsXPでGTKmm3のコンパイルができたっぽい。

こちらでは最後にDLLができたらしい(gtkmm-3.6.0-win32.7z)。

これと同じようなDLLができていた。 C:\MinGW\msys\1.0\gtkmm3\binのパスに。

ただ、libgiomm-2.4-1.dllはできなかった。 こちらの手順でダウンロードした中にはgiommがなかったからか。

とりあえずgiommは放置して、コンパイルできるか試した。

コンパイル

参考

MinGWGTK+3を利用したコードをコンパイルする。

http://d.hatena.ne.jp/propella/20080215/p1
http://onoono-life.blogspot.jp/2013/11/cc-hello-world-gtk.html

バッチファイル

ほぼ参考のをコピペ。

:: http://onoono-life.blogspot.jp/2013/11/cc-hello-world-gtk.html
set gcc="C:\MinGW\bin\gcc.exe"
set pkgconfig="C:\MinGW\msys\1.0\gtkmm3\lib\pkgconfig"
:: %gcc% hello.c `pkg-config --cflags --libs gtk+-3.0`
%gcc% -o hello.c -mwindows `pkg-config --cflags --libs gtk+-3.0`
pause

エラーが出た。

gcc.exe: エラー: `pkg-config: No such file or directory
gcc.exe: エラー: gtk+-3.0`: No such file or directory
gcc.exe: エラー: 認識できないオプション '--cflags' です
gcc.exe: エラー: 認識できないオプション '--libs' です
gcc.exe: 致命的エラー: 入力ファイルがありません
コンパイルを停止しました。

Windowsコマンドプロンプトはバッククォートに対応していない

http://ja.stackoverflow.com/questions/9146/gtk2-0%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93

というわけで、makeファイルを書いて実行。

Makefile

hello: hello.c
    gcc -o hello.exe -mwindows `pkg-config --cflags --libs gtk+-win32-3.0`
#   gcc -o hello.exe -mwindows `pkg-config --cflags --libs gtk+-3.0`
#   gcc -o hello.exe `pkg-config --cflags --libs gtk+-3.0`

gccの前はスペースでなくTABでないとダメらしいので注意。

実行と結果

>"C:\MinGW\bin\mingw32-make.exe" -f "Makefile"
gcc -o hello.c `pkg-config --cflags --libs gtk+-3.0`
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libmingw32.a(main.o): In function
 `main':
C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to `WinMai
n@16'
collect2: ld はステータス 1 で終了しました
mingw32-make: *** [hello] Error 1

WinMain参照エラー

ようするに以下のエラーが出でコンパイルできない。

C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference toWinMain@16'`

  • ググったら-mwindows引数が不要とか必要とか見つけたが、つけてもはずしても同じエラーだった
  • #include<windows.h>ソースコードに追記しても同様のエラーだった

「C:...mingw/main.c:73行目で、未定義のWinMain@16関数を参照した」というエラーだと思う。 たぶん、gtkmm3がWinMain関数を実装している。 でも、WinMain関数の定義が見つからない。ということか?

具体的にどうすればいいのやら…。

わからないことだらけ

  • そもそもDLL吐き出したらそれで終わりなのか?gtkmm3が動く環境にできたのか?
  • WinMainエラーはVC++でいうリンクエラーのことか?
  • でも、そういうのはpkg-config --cflags --libs gtk+-3.0とやらでうまいことやってくれるのでは?
  • というか、pkg-config --cflags --libs gtk+-3.0って何?
  • gccの使い方さっぱりわからん

こういうときは、とりあえず動く最小限の実物(コード)がほしい。 そこからチマチマ変更したりしていると、少しずつ理解できる。

ごちゃごちゃした理屈はぜんぶ後回しでいい。 でも、ごちゃごちゃしたものを把握せねば、動くまでこぎつけられない。 何をどうしていいかわからないから、諦めてしまう。 今、そういうところにいる。ここまできて…。

HelloWorldが一番大事。できないとはじめられない。 一体gtkmm3をはじめるのにどれだけの予備知識が必要なんだ?

所感

コピペプログラマーの限界か。

でも、わからないことがヒントになっているはず。 少しは自分でいろいろファイルを漁ったりしてみるか。

gtkmmを使わずにコンソールアプリでHelloWorldするとか、まだいろいろ確認できることはあるはず。