ぼく用あれこれまとめ

GLEW 1.9.0 を Visual Studio 2012 Express でビルドする

最終更新:

bokuyo

- view
管理者のみ編集可

GLEW 1.9.0 を Visual Studio 2012 Express でビルドする


  • GLEW 1.9.0 を Windows 7, Windows 8 環境にて導入します。
  • Visual Studio 2012 Express for Windows Desktop を使用しています。実行したのは 32bit(x86) 環境と 64bit(x64) 環境です。
    • 適宜、お使いの環境に合わせて読み進めてください
  • Visual C++ 2012 コンパイラ (v110) を使います

GLEW 1.9.0 をダウンロード

  • GLEW 1.9.0 のソースコードを下記のリンクからダウンロードします
  • ダウンロードしたソースファイルを解凍します。
  • (以降の説明では、C:\glew-1.9.0 ドライブに解凍したことにして説明します。適宜読み変えてください。)

Visual Studio 2012 用のソリューション・プロジェクトファイルを作る

  • "glew-1.9.0\build\vc10" フォルダをコピーして、新たに作業用の "glew-1.9.0\build\vc11" フォルダを作ります。
  • 作成した "glew-1.9.0\build\vc11" フォルダを開いて、"glew.sln" をVisual Studio 2012 Express で開きます

  • 次のポップアップウィンドウが出たら「更新する(U)」を選択してください
VC++ コンパイラとライブラリを更新します
このソリューションには、以前のバージョンの VC++ コンパイラとライブラリを使用するプロ
ジェクトが 1 つ以上含まれています。各プロジェクトを Visual C++ 2012 コン
パイラとライブラリを使用するように更新できます。
  • これで Visual C++ 2012 コンパイラを使用できます。

Visual Studio 2012 Express でビルドする

  • そのままビルド(F7)してください。

error RC2102: 文字列リテラル長すぎ

1>..\glew.rc(59): error RC2102: string literal too long
2>..\glew.rc(59): error RC2102: string literal too long
4>..\visualinfo.rc(39): error RC2102: string literal too long
3>..\glewinfo.rc(39): error RC2102: string literal too long
  • RCDATA の文字列リテラルが最大長を越えたのでエラーとのこと。

解決策(1) 長いなら、短くすればいい(非推奨)

  • ライセンス的にあんまり良くないので非推奨ですが、最も簡単な error RC2012 の取り除き方は、長すぎるリソースデータの文字列を短く編集することです。
  • 長い文字列を使ってるのは次のファイルです:
    • glew-1.9.0\build\glew.rc (59 行目)
    • glew-1.9.0\build\glewinfo.rc (39 行目)
    • glew-1.9.0\build\visualinfo.rc (39 行目)
  • 問題の箇所:
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "Comments", "The OpenGL Extension Wrangler Library\r\nCopyright (C) ... \0"

  • VALUE "Comments" に渡している文字列リテラル "The OpenGL Extension Wrangler Library\r\nCopyright (C) ... \0" の部分を2800字くらいになるまで削るとエラーは出なくなります
  • もしくはコメントアウトしちゃう
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "Comments", //"The OpenGL Extension Wrangler Librar
  • ただし、この方法はソースコードを書き換えてるので非推奨です
    • "Comments" の値は GLEW のソフトウェアライセンス・著作権表示部分であるため、なおさらよくないです。

解決策(2) おとなしく待つ(推奨)


  • Visual Studio 2010 では問題なかったのに、Visual C++ 2012 コンパイラではこのエラーがでるみたいです。
    • (MSVC 11 のバグなのか、仕様なのかわかりません)

解決策(3) 修正する


  • 試しに次のファイルの該当箇所を選択範囲に指定します:
    • glew-1.9.0\build\glew.rc (59 行目)
    • glew-1.9.0\build\glewinfo.rc (39 行目)
    • glew-1.9.0\build\visualinfo.rc (39 行目)

Visual Studio 2012 の「検索と置換」機能を使って修正します。
検索語句
\\r\\n
置換後の語句
\\r\\n"\n"
置換オプションとして次を選択します:
  • 大文字と小文字を区別します
  • 正規表現を使用します
  • 選択範囲

この設定で該当箇所を置換し、その後ビルドします。(ビルド前に1度クリーンしておくことを推奨します。)
無事ビルドがとおりました。

/SAFESEH を特に指定しないようにする(/SAFESEH:NO にするわけではありません)

  • GLEW 1.9.0 の Visual Studio 2010 用のソリューションファイル (.sln) を Visual Studio 2012 Express 用に変更すると、リンカーオプションに /SAFESEH が勝手に追加されます
    • Visual Studio 2010 用のソリューション・プロジェクトファイルを見る限り、/SAFESEH オプションは何も指定されていません
  • リンカ―の詳細設定から /SAFESEH に関する指定を外してあげます
    • ソリューションエクスプローラから "glew_shared" プロジェクトを選択
    • プロジェクト -> プロパティ -> 構成プロパティ -> リンカ― -> 詳細設定 -> "安全な例外ハンドラーを含むイメージ"
    • 「はい (/SAFESEH)」または「いいえ (/SAFESEH:NO)」が指定されている場合、項目を削除して何も指定しないようにします。(backspace キーか delete キーで指定されている文字「はい (/SAFESEH)」または「いいえ (/SAFESEH:NO)」を消しちゃってください)
  • glew_shared プロジェクトと同様に、glewinfo, visualinfo プロジェクトの /SAFESEH に関する指定を外します
  • "ビルド" -> "ソリューションのクリーン" でソリューション全体を一度クリーンします
  • ビルドします
  • Release(または Debug)でビルドするときに /SAFESEH に関する指定を外すのを忘れないように。


ランタイムライブラリを "マルチスレッド DLL" から "マルチスレッド" に変更

  • GLEW をライブラリとして使うアプリケーションによってはランタイムライブラリを変更する必要があります
    • (おそらく通常の Windows ゲームアプリケーションの場合、ランタイムライブラリは MTd/MT を設定していることでしょう)
  • GLEW 1.9.0 のランタイムライブラリは "マルチスレッド DLL (MDd/MD)" に設定されているので、"マルチスレッド (MTd/MT)" に変更します。

変更方法

  • glew_shared プロジェクトをソリューションエクスプローラーで選択して、右クリックで"プロパティ"を開きます
  • "構成プロパティ -> C/C++ -> コード生成 -> ランタイム ライブラリ" の項目を次のように変更します:
    • Debug の場合、/MTd (デフォルトでは /MDd)
    • Debug MX の場合、/MTd (デフォルトでは /MDd)
  • デフォルトで マルチスレッド (/MT) が設定されていますが念のため、Release モードの設定も確認します:
    • Release の場合、/MT
    • Release MX の場合、/MT
  • 同様の変更を、glew_static, glewinfo, visualinfo の各プロジェクトでも行います。
  • 変更し終えたら一度、"ビルド" -> "ソリューションのクリーン" でソリューション全体をクリーンしておきましょう
記事メニュー
目安箱バナー