Visual StudioでOpenGL開発を行う際、GLEWの使用で”glewInitは既にglew32.libで定義されています”というエラーが出ることがあります。これは静的リンクと動的リンクの設定が混在している場合に発生しやすく、正しいライブラリとプリプロセッサ定義の組み合わせを理解することで解決できます。この記事では具体的な対処法を解説します。
GLEWの静的リンクと動的リンクの違い
GLEWには静的ライブラリ(glew32s.lib)と動的ライブラリ(glew32.lib)があります。静的リンクではGlew本体がexeに組み込まれ、Glew32.dllは不要です。動的リンクではDLLに依存するため、実行時にDLLが必要です。
同時に両方をリンクしたり、静的リンク用にGlew32s.libを使いながらプリプロセッサにGLEW_STATICを指定していなかったりすると重複定義エラーが発生します。
エラー発生時の確認ポイント
今回の状況では、依存ライブラリにglew32s.libを指定し、プリプロセッサにはGLEW_STATICを設定しているとのことですが、glew32.libが追加されていないか確認してください。動的ライブラリとの混在が原因である可能性が高いです。
また、プロジェクトのリンク設定で、古い設定や他のサンプルコードからコピーされたライブラリが残っていないかも確認しましょう。
解決方法の手順
1. 依存ライブラリからglew32.libを削除し、glew32s.libだけをリンクする
2. プリプロセッサにGLEW_STATICを定義する
3. キャッシュのクリアやビルドのクリーンを行い、再ビルドする
この手順により、静的リンク環境で重複定義エラーが解消されるはずです。
動的リンクに変更する場合
動的リンクを使う場合は、GLEW_STATICをプリプロセッサから削除し、依存ライブラリにglew32.libを追加します。さらに、実行時にglew32.dllが実行ファイルと同じディレクトリにあることを確認してください。
まとめ
Visual StudioでのGLEW重複定義エラーは、静的リンクと動的リンクの設定が混ざっていることが原因です。静的リンクを使う場合はglew32s.libとGLEW_STATIC、動的リンクを使う場合はglew32.libとDLLを正しく設定することで解決できます。プロジェクト設定を見直し、不要なライブラリを削除することが重要です。

コメント