表題の通り、visualStudio2013 で freeType2.5.3 と FTGL2.1.3 をビルドしようとすると、FTGLをビルドしようとした段階でC関連(コンパイル時の使用言語設定によってはC++関連)の構文エラーが出ます。freetypeはC、FTGLはC++でできていることから来るエラーだということまでは分かるのですが、これはvisualStudioの設定の変更によって解決できる問題なのでしょうか?
また、freetypeのビルドはDebug/Release共に成功、FTGLのパス設定やライブラリ設定も問題ありません。以前まではこのような問題は発生しなかったので、VSのエラー基準が厳しくなったのだろうかと想像しています。なお警告レベルを変更しても結果に変化はありません。
どなたか解決方法が分かる方、アドバイスよろしくお願いいたします。
補足情報です。
OS: windows7 64bit
visualStudio2013: v12.0.30723.00 Update3
使用したfreetype: ft253.zip
使用したFTGL: ftgl-2.1.3-rc5.tar.gz
エラーは100個以上出ていますが、だいたいは以下のようなものです。
error C2143: 構文エラー : '}' が '(' の前にありません。
error C2146: 構文エラー : ';' が、識別子 'library' の前に必要です。
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
error C2065: 'FT_GlyphSlot' : 定義されていない識別子です。
error C2535: 'FTBBox::FTBBox(void)' : メンバー関数は、既に定義または宣言されています。
error C2228: '.x' の左側はクラス、構造体、共用体でなければなりません
#line 1 "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\shared\\fttypes.h"
おそらくこれが原因ではないかと。
freetype.h の中で fttype.h を取り込んでいるのですが、freetype の物では無くて WDK の物が取り込まれています。なので一部のマクロが定義されていません。
ビルドログを見た感じでは、構成プロパティ -> VC++ ディレクトリ の「インクルードディレクトリ」の方に freetype の include フォルダを追加しているようなので、構成プロパティ -> C/C++ -> 全般 の中の「追加のインクルードディレクトリ」の方へ追加してください。
あと、先ほど変更してもらった「ファイルの前処理」は「いいえ」に戻しておいてください。
これでもまだ同じエラーが出るようならファイル名を変更しないとダメでしょうね。
#line 1 "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\shared\\fttypes.h"
おそらくこれが原因ではないかと。
freetype.h の中で fttype.h を取り込んでいるのですが、freetype の物では無くて WDK の物が取り込まれています。なので一部のマクロが定義されていません。
ビルドログを見た感じでは、構成プロパティ -> VC++ ディレクトリ の「インクルードディレクトリ」の方に freetype の include フォルダを追加しているようなので、構成プロパティ -> C/C++ -> 全般 の中の「追加のインクルードディレクトリ」の方へ追加してください。
あと、先ほど変更してもらった「ファイルの前処理」は「いいえ」に戻しておいてください。
これでもまだ同じエラーが出るようならファイル名を変更しないとダメでしょうね。
うーん、ダメでしたか。おかしいですねえ。
とりあえず、「VC++ ディレクトリ」->「インクルードディレクトリ」は環境変数INCLUDEで、「追加のインクルードディレクトリ」はコマンドラインオプションの /I の指定ってことだと思います。
環境変数より /I での指定の方が優先されるそうなので、これでいけるかと思ったんですが・・・
はい、再インストール前の環境ではダメでした…。
環境変数とコマンドラインオプションの違い、なるほどそうだったんですね。ありがとうございます!実際、再インストールした環境でも「追加のインクルードディレクトリ」で指定しないとこれまでと同じエラーが出るようでした。大変勉強になりました。
うーん、ダメでしたか。おかしいですねえ。
2014/08/17 20:06:17とりあえず、「VC++ ディレクトリ」->「インクルードディレクトリ」は環境変数INCLUDEで、「追加のインクルードディレクトリ」はコマンドラインオプションの /I の指定ってことだと思います。
環境変数より /I での指定の方が優先されるそうなので、これでいけるかと思ったんですが・・・
はい、再インストール前の環境ではダメでした…。
2014/08/17 20:15:32環境変数とコマンドラインオプションの違い、なるほどそうだったんですね。ありがとうございます!実際、再インストールした環境でも「追加のインクルードディレクトリ」で指定しないとこれまでと同じエラーが出るようでした。大変勉強になりました。