现在的位置: 首页 > 综合 > 正文

如何Make WinPooch

2013年04月09日 ⁄ 综合 ⁄ 共 2835字 ⁄ 字号 评论关闭

sf上下了WinPoochhttp://sourceforge.net/projects/winpooch)的源码之后,一直想研究一下并改一改,要改就得编译。本来预计很快结束的过程,结果变成从中午到晚上长时间的鏖战,所幸最后还是编译完了。

拿到源代码之后先看到了MakeFile文件,打开一看就找到gccgrep这些熟悉的名词,第一感觉就是肯定得用cygwin下的Make了。但一弄就出错,提示找不到tchar.h等头文件,在cygwin下确实也没有发现,但在VS的目录下找到了,于是天真的以为改MakeFile就能解决问题,我设了VPath,还是没用。折腾了一会没辙,第一回合结束。

既然走不下去了,那就只能上网搜了,所幸碰巧看到了WinPoochSF上的MailList(以前从来没仔细看过),果然也有人问编译的问题,Dev给出了答案:1、得用MingWSF中有)来Make2、还得下FreeImage的类库。当时就火了,为什么不在Readme里面说清楚,害我找半天。

OK,下了MingW,安装又异常麻烦。因为下下来的只是一个壳,你选中Components它再下。等了半天下完了,环境变量里添加MingW\bin,尝试Make,还是不行,把下来的FreeImage包里的Dist下面的FreeImage.h添到MingW下面的include里,把DLLLIB拷到MingW\Lib(后来证明拷DLLLIB没有任何用处),Make仍旧不行。不过这次不是头文件的问题,问题出在FreeImage.h上,几个定义与Windows.h有冲突。第二回合结束。

又做不下去了,只能在google里胡乱去找。这次FreeImage(也是SF的项目)的MailList里碰巧在前几面就看到别人有相同的问题,解决办法就是在include <freeimage.h>之前添加#define _WINDOWS_FreeImage的开发人员还把问题归到到MingW上,算了,不说了。在application.cpicbtnctl.csplash.c这三个文件前加上#define _WINDOWS_,再次编译,终于能哗哗哗的生成.o文件了,就在我以为胜利就在前方时又不行了。提示Perl buildcounter.pl version.h(为了提高版本号)找不到命令,果然MingW下面没有PerlCygWin下面有,再晕。两个功能不差不多吗?就不能取长补短一下。赶紧设了CygWin\bin到环境变量的Path里面,再Make,仍然不行,这次提示的错误出在链接过程中,都与FreeImage有关。把DLLLIB移来移去还是错(不过能确定GCC确实在MingWLIB下找),又走不了了。第三回合结束。

在这里不得不佩服Dev,一个用Win32API写的程序用Linux下的一套东西编译再在Windows下运行,你在VC里面做不就行了,费那事儿干嘛!把我折腾的死去活来的,晚上还只吃了泡面,可恶。想到调试又不好调,郁闷了。

找来找去没想法的时候,突然在网上看到一篇GCC的文章,讲到GCC链接的链接库都是.a后缀的,-lxyz相当于链接libxyz.a。估计是还得拿源代码编译成.a格式的,在FreeImage下找到README.minGW,终于找到解决方法:

This file explains how to create a FreeImage.a file from the FreeImage DLL, so that it can be linked with the MinGW / LCC WIN 32 / GNU gcc C compiler.

 

1) Open a DOS shell (run the program cmd.exe)

 

2) Add the MinGW path to your environment variable :

 

C:\>set PATH=%PATH%;C:\mingw32\bin;

 

3) Creates a .def file from the FreeImage DLL

 

C:\>pexports freeimage.dll | sed "s/^_//" > freeimage_gcc.def

 

4) Creates the FreeImage.a file

 

C:\>dlltool -U -d freeimage_gcc.def -l freeimage.a

 

Note : you may also use a batch file to automate this process :

 

--- FIExport.bat ---

set PATH=%PATH%;C:\mingw32\bin;

pexports freeimage.dll | sed "s/^_//" > freeimage_gcc.def

dlltool -U -d freeimage_gcc.def -l libfreeimage.a

--- FIExport.bat ---

Pexports没有找到,OK,从网上下,很快也找到了(http://www.emmestech.com/software/cygwin/pexports-0.43/pexports-0.43.zip)。解压后将Bin里面的pexports拷到MingW下的Bin里,按着上述方法生成FreeImage.a,再次拷到MingW\lib里,Make,仍然不行,查看GCC的帮助,把FreeImage.a,更名为libfreeimage.a,再次Make。在心上窜下跳了N次之后,没有任何提示的结束了Make过程,WinPooch.exe终于出现了!可我已经被折磨的激动不起来了。要运行的话还得把Language目录和FreeImage.dll拷到同目录下。

总的说来,还算比较幸运,虽然花了不少时间,但第一次Make了一个比较大的软件。总结一下,还是有问题就googleMailListForum也很重要,是在不行就Mail给作者。然后有必要弄清GCCMakefile这套东西,这才是Linux的精华。最后,佩服Dev的做法。

 

附,解决问题步骤简要版:

1、下winpoochcygwinmingwfreeimagepexports

2、安装cygwinmingw,把pexports.exe拷到mingw\bin下,path里面添加cygwin\binmingw\bin

3、按FreeImage下找到README.minGW,按其中步骤生成freeimage.a,把freeimage.h拷到mingw\include里,freeimage.a更名为libfreeimage.a拷到mingw\lib

4、改源代码,在application.cpicbtnctl.csplash.c这三个文件前加上#define _WINDOWS_

5Make

6、如果顺利得到winpooch.exe,把它和Language目录和FreeImage.dll弄到一起,就可以运行了。

抱歉!评论已关闭.