visualStudio2013 で freeType / FTGL のビルドが失敗します。


表題の通り、visualStudio2013 で freeType2.5.3 と FTGL2.1.3 をビルドしようとすると、FTGLをビルドしようとした段階でC関連(コンパイル時の使用言語設定によってはC++関連)の構文エラーが出ます。freetypeはC、FTGLはC++でできていることから来るエラーだということまでは分かるのですが、これはvisualStudioの設定の変更によって解決できる問題なのでしょうか?

また、freetypeのビルドはDebug/Release共に成功、FTGLのパス設定やライブラリ設定も問題ありません。以前まではこのような問題は発生しなかったので、VSのエラー基準が厳しくなったのだろうかと想像しています。なお警告レベルを変更しても結果に変化はありません。

どなたか解決方法が分かる方、アドバイスよろしくお願いいたします。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2014/08/17 20:22:36
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:onigiriTurnA

補足情報です。

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' の左側はクラス、構造体、共用体でなければなりません

ベストアンサー

id:siachan No.1

回答回数91ベストアンサー獲得回数23

ポイント100pt

#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++ -> 全般 の中の「追加のインクルードディレクトリ」の方へ追加してください。

あと、先ほど変更してもらった「ファイルの前処理」は「いいえ」に戻しておいてください。

これでもまだ同じエラーが出るようならファイル名を変更しないとダメでしょうね。

他1件のコメントを見る
id:siachan

うーん、ダメでしたか。おかしいですねえ。
とりあえず、「VC++ ディレクトリ」->「インクルードディレクトリ」は環境変数INCLUDEで、「追加のインクルードディレクトリ」はコマンドラインオプションの /I の指定ってことだと思います。
環境変数より /I での指定の方が優先されるそうなので、これでいけるかと思ったんですが・・・

2014/08/17 20:06:17
id:onigiriTurnA

はい、再インストール前の環境ではダメでした…。

環境変数とコマンドラインオプションの違い、なるほどそうだったんですね。ありがとうございます!実際、再インストールした環境でも「追加のインクルードディレクトリ」で指定しないとこれまでと同じエラーが出るようでした。大変勉強になりました。

2014/08/17 20:15:32

その他の回答0件)

id:siachan No.1

回答回数91ベストアンサー獲得回数23ここでベストアンサー

ポイント100pt

#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++ -> 全般 の中の「追加のインクルードディレクトリ」の方へ追加してください。

あと、先ほど変更してもらった「ファイルの前処理」は「いいえ」に戻しておいてください。

これでもまだ同じエラーが出るようならファイル名を変更しないとダメでしょうね。

他1件のコメントを見る
id:siachan

うーん、ダメでしたか。おかしいですねえ。
とりあえず、「VC++ ディレクトリ」->「インクルードディレクトリ」は環境変数INCLUDEで、「追加のインクルードディレクトリ」はコマンドラインオプションの /I の指定ってことだと思います。
環境変数より /I での指定の方が優先されるそうなので、これでいけるかと思ったんですが・・・

2014/08/17 20:06:17
id:onigiriTurnA

はい、再インストール前の環境ではダメでした…。

環境変数とコマンドラインオプションの違い、なるほどそうだったんですね。ありがとうございます!実際、再インストールした環境でも「追加のインクルードディレクトリ」で指定しないとこれまでと同じエラーが出るようでした。大変勉強になりました。

2014/08/17 20:15:32
  • id:siachan
    http://slis.tsukuba.ac.jp/~fujisawa.makoto.fu/lecture/iml/text/screen_character.html

    VS2013EEを使っていますが、特に問題なく ftgl.dll が生成されました。
    その発生したというエラーの内容がわからないことには答えようが無いのでは・・・
  • id:onigiriTurnA
    siachanさん、コメント感謝いたします。一般的な症状かと早合点してしまい、ご指摘の通り情報量が少なかったです。補足事項を追記しました。ちなみに添付していただいたURL記事の通りにしても同じ症状が出ます。
  • id:a-kuma3
    FTGL をコンパイルしようとしている方で、freetype へ include のパスが通ってないんだと思いますよ。
  • id:onigiriTurnA
    a-kuma3さん、コメントありがとうございます。構文エラーはインクルードしたfreeTypeのファイル内(fterrdef.hやfreetype.h、ftoutln.hなど)で起こっているようなので、パスは問題ないと考えていたのですが、その認識はずれていたのでしょうか…?

    インクルードパスを通す作業は、ftgl_dllとftgl_staticの各プロジェクトのプロパティ→「VC++ディレクトリ」で、freeTypeフォルダ直下のincludeフォルダのパスをインクルードディレクトリに追加する、というものでした。この操作に誤りがあるのでしょうか?
  • id:a-kuma3
    補足で書いているエラーのうち、FT_GlyphSlot (freetype の関数ですよね)が定義されてない、と出てるので、include のパスの問題だと思いました。
  • id:siachan
    ビルドログ(ftgl-2.1.3~rc5\msvc\vc8\x64\Release\ftgl_dll.log)をどこかのアップローダか何かに上げることは可能ですか?
    中に個人名等が含まれているならそこは別の文字に置き換えてもらってかまいませんが、それ以外はそのままの状態で。
  • id:onigiriTurnA
    お二人ともありがとうございます。以下にビルドログをアップしました。よろしければご確認ください。

    http://fast-uploader.com/file/6963792984367/

    パス:onigiriTurnA
  • id:onigiriTurnA
    追記:上記サイトからファイルをダウンロードするとなぜか拡張子が変わってしまうようです。.txtに書き換えれば普通に読めるかと思います。
  • id:siachan
    どうしてそんなエラーが出るんですかね・・・
    コマンドプロンプトを開いて
    CL /P /FiC:\test\ftb.txt /I"C:\test\freetype-2.5.3\include" /I"C:\test\ftgl-2.1.3~rc5\src" /I"C:\test\ftgl-2.1.3~rc5\msvc" /Zi /nologo /W3 /WX- /O2 /Ob1 /D NDEBUG /D WIN32 /D _WINDOWS /D _USRDLL /D FTGL_LIBRARY /D _VC80_UPGRADE=0x0600 /D _WINDLL /D _MBCS /GF /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TP /errorReport:prompt "C:\test\ftgl-2.1.3~rc5\src\FTBuffer.cpp"
    とすると C:\test\ftb.txt が作成されるので、それをアップしてもらえますか?
    >>
    <<
  • id:onigiriTurnA
    はい…環境の何かを変えてしまったのだと思うのですが、全然分かりません…。ご指示のファイルは以下です。

    http://fast-uploader.com/file/6963810021662/

    passWord: onigiriTurnA
  • id:siachan
    IDEの中と外では環境が違いましたね・・
    ソリューションエクスプローラの ftgl_dll を右クリックしてプロパティを開き、構成プロパティ-> C/C++ -> プリプロセッサ の巡にたどっていき、「ファイルの前処理」を「はい (/P)」に変更し[OK]を押してください。
    ftgl_dll を右クリック -> ビルドでビルドすると
    C:\test\ftgl-2.1.3~rc5\msvc\vc8\Release_ST\FTBuffer.i
    が作成されるので、それを送ってください。
  • id:onigiriTurnA
    作成いたしました!

    http://fast-uploader.com/file/6963815403440/

    passWord: onigiriTurnA

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません