• ベストアンサー

Windowsコモンコントロールのcygwin/gccコンパイルエラー

以下のサイトのようなWindowsコモンコントロールのプログラムをcygwin/gccコンパイルするとエラーがでます。 (sourceのサイト) http://wisdom.sakura.ne.jp/system/winapi/common/common16.html (ビルドコマンド) gcc -mwindows -mno-cygwin -o main.exe main.cpp (エラー出力) undefined reference to `_ImageList_Destroy@4' undefined reference to `_InitCommonControls@0' undefined reference to `_ImageList_Create@20' undefined reference to `_ImageList_ReplaceIcon@12' undefined reference to `_ImageList_ReplaceIcon@12' collect2: ld returned 1 exit status make: *** [main.exe] Error 1 Windowsコモンコントロールを含んだプログラムをcygwin/gccコンパイルするにはどうすればよいでしょうか? コンパイルは出来ないのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • onosuke
  • ベストアンサー率67% (310/456)
回答No.2

コンパイルは成功。 リンク処理(ld)でエラー発生していますね。 Windowsコモンコントロールを含んだプログラムをコンパイルするには 【Windowsコモンコントロール】の【ライブラリ】をプログラムにリンクさせる必要があります。 # MicrosoftのVisualCを使った場合でも、同様のリンク処理が必要です。 gccでライブラリを指定するオプションは -l(ライブラリ名)。 【Windowsコモンコントロール】の【ライブラリ名】は 【comctl32】 なので、 -lcomctl32 オプションを(ビルドコマンド)末尾に追加する必要があります。 さらに 【comctl32】 が 【gdi32】ライブラリ に依存するので、実際のビルドコマンドは以下のようになります。  gcc -mwindows -mno-cygwin -o main.exe main.cpp -lcomctl32 -lgdi32 最後に 「undefined reference to XXXXXX」エラーは、ライブラリのリンク漏れです。今回のように必要なライブラリとライブラリの依存関係を調査し、-lオプションで必要なライブラリ名を指定することで解決できます。 調査方法は、参考URLのように XXXXXX 部分を検索するのが簡単な方法です。(参考URLでは、`_ImageList_Destroy@4'から`ImageList_Destroy`部分を検索キーとして利用しています。)

参考URL:
http://www.google.co.jp/search?q=ImageList%5fDestroy
kahata
質問者

お礼

できました!ありがとうございます。教えて頂いたライブラリ検索法は大変有益で参考になります

その他の回答 (1)

回答No.1

 こんにちは。  Windowsコモンコントロールを使用するには  comctl32.lib  をリンクします。

kahata
質問者

お礼

ありがとうございます。このライブラリがわかりませんでした。

関連するQ&A