- ベストアンサー
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コンパイルするにはどうすればよいでしょうか? コンパイルは出来ないのでしょうか? よろしくお願いします。
- みんなの回答 (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`部分を検索キーとして利用しています。)
その他の回答 (1)
- machongola
- ベストアンサー率60% (434/720)
こんにちは。 Windowsコモンコントロールを使用するには comctl32.lib をリンクします。
お礼
ありがとうございます。このライブラリがわかりませんでした。
お礼
できました!ありがとうございます。教えて頂いたライブラリ検索法は大変有益で参考になります