TeXLive套装开放源代码,在Windows下编译需要安装有Msys/gcc,另外还需要fontconfig
代码编译倒是不太难,下载代码下来,在解开的源代码目录下建立一个专门的构建
目录,比如build-dir
依道理来说,不建立也可以编译,但在编译web2c的时候会出问题,因为生成的Makefile
中tangle.exe会根据.web文件生成pascal代码时,判断WEBINPUTS环境变量时,如果两
个数值都是当前目录,会出错,出错原因未知。
在build-dir目录下运行上一级目录下的configure脚本,整体脚本大致如下:
../configure --enable-cxx-runtime-hack --disable-native-texlive-build --disable-dialog --enable-etex --disable-debug
配置脚本时,通常会卡在一个check gcc depend xxx之类的上面,查看任务管理器发现
cp.exe在狂消耗CPU,估计是gcc目录下的cp.exe与msys有冲突,因此将gcc的bin目录的
cp.exe改名,之后就可以完全通过配置来生成Makefile了。
如果环境没有问题,那么很快就可以生成Makefile,然后执行make命令就可以开始编译了
编译需要大概一到两小时,生成的一些.o/.a文件等等大概会到1.3G左右。
在编译过程中,由于我环境上mingw32的gcc的头文件中,sys/time.h与sys/timeb.h同时存在
这在编译一些程序时会报告出错,比如编译dvisvgm时会报告找不到gettimeofday函数,其实
只需要将dvisvgm下生成的config.h中HAVE_GETTIMEOFDAY与HAVE_SYS_TIME_H注释掉即
可以了
第二个问题是luatex还是xetex在编译时会自动认为sys/time.h存在,且强制引用了gettimeofday
因此,我们还是需要实现这个函数,并且必须编译成.a文件
代码如下:
#include
#include
#include
int gettimeofday (struct timeval *tv, void *tz)
{
struct timeb tb;
ftime(&tb);
tv->tv_sec = tb.time;
tv->tv_usec = tb.millitm * 1000;
return 0;
}
将这段代码用gcc编译成.o,然后加入到系统一个.a里面,整个工程就可以编译链接通过了
编译完后,使用make install命令即可将程序安装到/texlive目录,安装后的程序并没有去掉
调试符号,使用命令strip *.exe即可。
这时候安装好的TeXLive内容缺失很多,基本上只是一些EXE生成了,后续再研究如何准备
系统必备文件。
阅读(2819) | 评论(2) | 转发(0) |