• ベストアンサー
  • すぐに回答を!

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

  • 質問No.4428503
  • 閲覧数832
  • ありがとう数4
  • 回答数2

お礼率 39% (66/166)

以下のサイトのような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コンパイルするにはどうすればよいでしょうか?
コンパイルは出来ないのでしょうか?
よろしくお願いします。

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

  • 回答No.2
  • ベストアンサー

ベストアンサー率 67% (310/456)

コンパイルは成功。
リンク処理(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`部分を検索キーとして利用しています。)
お礼コメント
kahata

お礼率 39% (66/166)

できました!ありがとうございます。教えて頂いたライブラリ検索法は大変有益で参考になります
投稿日時:2008/10/26 11:23

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 60% (434/720)

 こんにちは。

 Windowsコモンコントロールを使用するには
 comctl32.lib
 をリンクします。
お礼コメント
kahata

お礼率 39% (66/166)

ありがとうございます。このライブラリがわかりませんでした。
投稿日時:2008/10/26 11:24
関連するQ&A

ピックアップ

ページ先頭へ