2011-05-23 100 views
0

我在Windows 7中用MinGW編譯,使用Code :: Blocks作爲IDE。一切都應該是最新的。我注意到有一些類似的問題,但這些似乎是關於鏈接動態庫,而不是編譯靜態庫。無法使用MinGW鏈接FreeType 2庫; ld.exe:找不到-lfreetype

我想使用FTGL能夠在OpenGL中使用文本。 FTGL要求安裝FreeType 2。我下載了FreeType源代碼,然後使用mingw32-make.exe按照INSTALL.GNU指令從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.a: \的FreeType-2.4.4 \ OBJ文件。

然後,我在Code :: Blocks中將步驟鏈接到該項目,添加了一些代碼來測試FTGL,並嘗試構建它。

我有兩個錯誤,這取決於我如何嘗試做事。

如果我向鏈接器(-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。那麼爲什麼創建freetype.a代替?這是使用我用來編譯程序的庫使用相同的編譯器。

無論如何,不​​知道從哪裏去。我想過使用屬於MinGW軟件包的MSys shell,但我沒有太多經驗,INSTALL.UNIX中的指令假定你知道更明顯的命令。他們提到使用./configure [options],而沒有提到哪些選項可能是明智的。可能對具有更多系統知識的人很明顯,但MSys是我第一次使用sh。

我很感謝這件事的任何幫助。

回答

0

我libfreetype.a的版本(2.4.4,從修改的Debian軟件包內置)不導出鏈接正在尋找(FTPixmapFont構造函數)的符號,也沒有在頭文件中聲明這樣的類。快速谷歌搜索表明他們屬於FTGL。

將您的導入文件重命名爲libfreetype。a是正確的(mingw ld不會找到它),但是你是否也鏈接到必要的FTGL庫?