ㄚ琪用Mingw編譯Glib 2.30.0失敗了,主因是編譯到需要Python時,Mingw不支援,這讓人很是懊惱,看來要跨平台使用GTK不是那麼簡單,可是ㄚ琪又是一個很執著的人,所以還是另覓其他管道,這回要改用免費的Microsoft Visual C++ 2010 Express來編譯了,你可能會想微軟的GUI不是做得很好了,而且很簡單,幹嘛還這麼麻煩來編譯GTK,唉,這是GTK跨平台的堅持啊,而且因為Visual系列是Winodws下的主流,以及很多Linux-like的開發套件也支援Visual系列的編譯,所以我們就轉個方向吧。
希望這不會很難,而且Gnome的站上已經有這篇Compiling the GTK+ stack using Visual C++ 2008/2010,你會問我這篇是怎知道的,其實在GTK+-3.2.0的README.win32裡頭已有這樣的介紹,看起來要邁向編譯GTK 3可能就要用這種方式了。
準備
因為文章已有了,所以ㄚ琪就簡述一路的操作,因為ㄚ琪是用Windows XP,所以要確認有cl.exe跟ml.exe,再來建立一些目錄:
mkdir c:gtk_compilationvs10Win32 mkdir c:gtk_compilationvs10Win32bin mkdir c:gtk_compilationvs10Win32include mkdir c:gtk_compilationvs10Win32lib
相關檔案
1. ZLib
編輯win32/makefile.msc
CFLAGS = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC)
改為
CFLAGS = -nologo -MDd -W3 -Od -Zi -Fd"zlib" $(LOC)
主因是為了偵錯使用。
使用Visual Studio 命令提示字元 (2010)進入zlib的目錄編譯:
cd $(the_folder_where_zlib_was_unpacked) nmake -f win32/makefile.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj"
/*這是針對32-bit用的*/ nmake -f win32/Makefile.msc AS=ml64 LOC="-I. -I.win32 -DASMV -DASMINF" OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"
/*這是針對x86-64用的,這是一行的指令*/
一開始編譯的時候,還發現:
adler32.c : fatal error C1902: 程式資料庫管理員不相符; 請檢查您的安裝
NMAKE : fatal error U1077: ‘”C:Program FilesMicrosoft Visual Studio 10.0VCBI
Ncl.EXE”‘ : 傳回碼 ‘0x2’
Stop.
Orz.才剛開始困難就出現了,還好有解,只要把C:Program FilesMicrosoft Visual Studio 10.0Common7IDE下的mspdbsrv.exe複製到C:Program FilesMicrosoft Visual Studio 10.0VCbin也就是cl.exe所在的目錄,真的就可以了,當然ㄚ琪也不再解釋原因了,各位可以去Google看看原因,不過我猜啦,因為微軟的東西有IDE加持,所以在視窗下使用比較不會有問題,不過命令列下編譯可能會有一些檔案路徑沒設對的問題發生。
之後真的再編譯就成功了。
這裡說:
-複製ZLib的根目錄裡的zlib.h跟zconf.h到c:gtk_compilationvs10Win32include
-複製Zlib的根目錄裡的zdll.lib跟zlib1.lib到c:gtk_compilationvs10Win32lib
(註:我只有zdll.lib跟zlib.lib兩個檔案,有點不一樣,做mark起來注意)
-複製Zlib的根目錄裡的zlib1.dll到c:gtk_compilationvs10Win32bin
2. LibPNG
文章中是使用中文的visual視窗介面的截圖,英文說明,在x64的操作,ㄚ琪則以Win32為例來紀錄這次的經驗:
ㄚ琪下載的是lpng155.zip
解壓縮然後進到lpng155projectsvstudio,開啟vstudio.sln
ㄚ琪手快已經把pngvalid下的zlib砍掉了,而且1.55版的跟原文有些許出入。
另外Win32的組態原本就有了,所以就不用再新增。
進入每個專案的屬性頁,其實ㄚ琪只有玩libpng這個屬性頁。
2.1.原文是新增zlib1.lib (或 zlib1d.lib)但是我只有zlib.lib,而且與原設定同,不修改
2.2.新增c:gtk_compilationvs10Win32include到C/C++->一般的其他Include目錄中
2.3. 新增c:gtk_compilationvs10Win32lib到連結器->一般的”其他程式庫目錄”中。
ㄚ琪使用組態: Release Win32編譯時會有
正在建立程式庫 D:sourceClpng155projectsvstudioReleaselibpng15.lib 和物件 D:sourceClpng155projectsvstudioReleaselibpng15.exp
LINK : warning LNK4098: 預設的程式庫 ‘MSVCRTD’ 與其他使用的程式庫衝突,請使用 /NODEFAULTLIB:library
這樣的警告,而且建置: 1 成功、0 失敗、1 最新、0 略過,有一個編譯失敗了。
但是在組態: Debug Win32編譯時,是全部重建: 2 成功、0 失敗、 0 略過,卻是成功了,看起來可能是zlib是偵錯模式的編譯才有這樣的狀況
放置檔案到下列的位置:
- -複製png.h、pngconf.h、pnglibconf.h及pngpriv.h到c:gtk_compilationvs10Win32include
-複製libpng15.lib [或偵錯模式的libpng15d.lib] 到c:gtk_compilationvs10Win32(ㄚ琪偵錯模式下還是為libpng15.lib)
-複製libpng15.dll [或偵錯模式的libpng15d.dll]到c:gtk_compilationvs10Win32bin(ㄚ琪偵錯模式下還是libpng15.dll)
3. Pixman Library
這裡的說明ㄚ琪實做的時候有點懷疑納悶,所以先測試一下,下載的是pixman-0.22.2.tar.gz,解壓縮程式擋到c:gtk_compilation,下載pixman-vsproj.zip,解壓縮到c:gtk_compilation,開啟buildwin32vs10下的pixman.sln,然後依據選擇事組態來建置,.DLL、.Lib跟標頭檔複製到適當的地方(在 c:gtk_compilationvs10Win32bin、c:gtk_compilationvs10Win32lib跟c:gtk_compilationvs10Win32include下,這裡頭ㄚ琪奇怪的就是有需要一定要複製到c:gtk_compilation下嗎?看起來不用,因為如果這樣就跟前面的建置模式有點不同了,可是建置成功後的複製動作,卻又沒什麼差異。另外ㄚ琪在開啟pixman.sln時,會有下面的警告
C:gtk_compilationbuildwin32vs10pixman.vcxproj : warning : 找不到專案檔 ‘pixman’ 中參考的平台 ‘x64’。請確認您是否將它安裝在 ‘%VCTargetsPath%Platformsx64’ 之下。
C:gtk_compilationbuildwin32vs10install.vcxproj : warning : 找不到專案檔 ‘install’ 中參考的平台 ‘x64’。請確認您是否將它安裝在 ‘%VCTargetsPath%Platformsx64’ 之下。
疑似ㄚ琪的平台不是x64的關係,先暫時不管。
4. IJG JPEG library
下載最新的jpegsr8c.zip,解壓縮到jpeg-8c中,原文中有兩個步驟,似乎是選擇其中一種就行,但是ㄚ琪不是很瞭解是否有問題,所以兩種步驟都執行:
1.就是要建立static的library,因為ㄚ琪使用Visual C++ 2010 Express,所以沒注意他說的Visual C++ 2008的情況會有什麼事?。
1.1 到jpeg-8c,然後複製改名jconfig.vc為jconfig.h
1.2 命令列字元下執行
nmake -f makefile.vc
(ㄚ琪使用偵錯模式) nmake -f makefile.vc NODEBUG=1 (Release)
2.是dll模式的建置。
2.1 下載makefile.vc 跟 jmorecfg.h,然後放到jpeg-8c下,註這兩個檔案原本就有了,所以ㄚ琪保守其見改名不覆蓋
2.2 執行
nmake -f makefile.vc DLL=1
(ㄚ琪使用偵錯模式) nmake -f makefile.vc DLL=1 NODEBUG=1 (Release)
3.
-jconfig.h、jerror.h、jmorecfg.h跟jpeglib.h在c:gtk_compilationvs10Win32include
-libjpeg.lib在c:gtk_compilationvs10Win32lib
-libjpeg.dll在c:gtk_compilationvs10Win32bin — 只有DLL下編譯才有
-所有的.exe檔在c:gtk_compilationvs10Win32bin
5. LibTIFF
踢到鐵板了,錯誤真多,大挫折來了。(2011/10/04)
- 編譯器
- 設定C和C++ Code::Blocks編譯器的初學者教學指南:如果你苦惱的是編譯器的使用,可以看看設定C和C++ Code::Blocks編譯器的初學者教學指南。
- Code::Blocks 13.12 繁體中文化:如果想要使用code block 中文的朋友可以繼續閱讀Code::Blocks 13.12 繁體中文化,這裡不會有code block中文亂碼的問題。
- 設定Dev-C++ 5.11和MinGW-w64, Windows上免費的C跟C++編譯器
- C跟C++的Apple XCode
- g++簡介
- 使用Microsoft Visual C++ 2010 Express編譯GTK+
- Eclipse+CDT+MinGW 安裝測試
- 編譯器gcc
- Code::Blocks 20.03的安裝設定及繁體中文化