0

IDEとしてCode::Blocksを使用して、Windows7でMinGWをコンパイルしています。すべてが最新である必要があります。同様の質問がいくつかあることに気づきましたが、それらは静的ライブラリをコンパイルするのではなく、動的ライブラリをリンクすることに関するもののようでした。

OpenGLでテキストを使用できるようにするためにFTGLを使用しようとしています。FTGLには、FreeType2がインストールされている必要があります。FreeTypeソースをダウンロードし、INSTALL.GNUの指示に従って、mingw32-make.exeを使用してCMD.EXEから静的ライブラリをビルドしました。

指示に従って、FreeTypeインストールのベースディレクトリからmingw32-makeを実行しました。コンソール出力は期待どおりでした:

D:\freetype-2.4.4>mingw32-make

FreeType build system -- automatic system detection

The following settings are used:

  platform                     win32
  compiler                     gcc
  configuration directory      .\builds\win32
  configuration rules          .\builds\win32\w32-gcc.mk

If this does not correspond to your system or settings please remove the file
'config.mk' from this directory then read the INSTALL file for help.

Otherwise, simply type 'make' again to build the library.
or 'make refdoc' to build the API reference (the latter needs python).

Could Not Find D:\freetype-2.4.4\objs\ftmodule.h
Generating modules list in ./objs/ftmodule.h...
"* module: truetype  (Windows/Mac font files with extension *.ttf or *.ttc)"
"* module: type1     (Postscript font files with extension *.pfa or *.pfb)"
"* module: cff       (OpenType fonts with extension *.otf)"
"* module: cid       (Postscript CID-keyed fonts, no known extension)"
"* module: pfr       (PFR/TrueDoc font files with extension *.pfr)"
"* module: type42    (Type 42 font files with no known extension)"
"* module: winfnt    (Windows bitmap fonts with extension *.fnt or *.fon)"
"* module: pcf       (pcf bitmap fonts)"
"* module: bdf       (bdf bitmap fonts)"
"* module: sfnt      (helper module for TrueType & OpenType formats)"
"* module: autofit   (automatic hinting module)"
"* module: pshinter  (Postscript hinter module)"
"* module: raster    (monochrome bitmap renderer)"
"* module: smooth    (anti-aliased bitmap renderer)"
"* module: smooth    (anti-aliased bitmap renderer for LCDs)"
"* module: smooth    (anti-aliased bitmap renderer for vertical LCDs)"
"* module: psaux     (Postscript Type 1 & Type 2 helper module)"
"* module: psnames   (Postscript & Unicode Glyph name handling)"
done.

プラットフォームとコンパイラの両方が正しいことを確認して、makeコマンドを再度実行しました。

D:\freetype-2.4.4>mingw32-make
(bunch of calls, building objects then linking them, until:)
ar: creating objs/freetype.a

これにより、ディレクトリD:\ freetype-2.4.4\objsにファイルfreetype.aが作成されました。

次に、Code :: Blocksの手順を実行してライブラリをプロジェクトにリンクし、FTGLをテストするためのサンプルビットを追加して、ビルドを試みました。

方法によっては、2つのエラーが発生します。

リンカに正しいディレクトリ(-LD:\ freetype-2.4.4 \ objs)を提供し、-lfreetypeでリンクすると、ld.exeがタイトルのエラーで終了し、-lfreetypeが見つからなくなるまで、すべて問題ありません。

正しいディレクトリを指定しないと、同じエラーが発生します。ライブラリが見つかりません。

ファイルの名前freetype.aをlibfreetype.aに変更し、適切なディレクトリを指定すると、代わりにいくつかの未定義の参照が取得されます。

obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x250): undefined reference to `FTPixmapFont::FTPixmapFont(char const*)'
obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x258): undefined reference to `FTFont::Error() const'
obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x274): undefined reference to `FTFont::FaceSize(unsigned int, unsigned int)'
obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x308): undefined reference to `FTFont::Render(char const*, int, FTPoint, FTPoint, int)'
obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x316): undefined reference to `FTPixmapFont::~FTPixmapFont()'
obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x328): undefined reference to `FTPixmapFont::~FTPixmapFont()'
collect2: ld returned 1 exit status

間違ったディレクトリを指定すると、ライブラリが見つからないという以前のエラーが発生します。

インストールファイルの指示に従うと、makeがlibで始まらない名前のライブラリを生成するのは奇妙だと思いました。私がチェックしたところ、他のすべての.aファイルはlib-で始まっていました。そして、リンカがファイルlibfreetype.aを探しているようです。では、なぜmakeは代わりにfreetype.aを作成するのですか?これは、プログラムのコンパイルに使用しているライブラリと同じコンパイラを使用しています。

とにかく、ここからどこへ行くのかわからない。MinGWパッケージの一部であるMSysシェルを使用することを考えましたが、それについてはあまり経験がなく、INSTALL.UNIXの命令は、より明白なコマンドを知っていることを前提としています。彼らは、どのオプションが推奨されるかについては言及せずに、。/configure[options]の使用について言及しています。システムの知識が豊富な人にはおそらく明らかですが、MSysはshでの私の最初の経験です。

この件についてご協力いただければ幸いです。

4

1 に答える 1

1

私のバージョンのlibfreetype.a(2.4.4、変更されたdebianパッケージから構築)は、リンカーが探しているシンボル(FTPixmapFontコンストラクター)をエクスポートせず、ヘッダーもそのようなクラスを宣言しません。クイックグーグル検索は、それらがFTGLに属していることを示しています。

インポートファイルの名前をlibfreetype.aに変更するのは正しいことでしたが(mingw ldはそれ以外の方法では検出しません)、必要なFTGLライブラリにもリンクしましたか?

于 2011-07-16T09:06:29.553 に答える