分类: 系统运维
2009-08-15 22:47:21
一、软件获取
1、libiconv:
2、GD:
二、环境配置
[root@localhost ~]# rpm -qa|grep fontconfig
fontconfig-2.4.1-7.el5
fontconfig-devel-2.4.1-7.el5
[root@localhost ~]# rpm -qa|grep freetype
freetype-2.2.1-19.el5
freetype-devel-2.2.1-19.el5
[root@localhost ~]# rpm -qa|grep libjpeg
libjpeg-6b-37
libjpeg-devel-6b-37
[root@localhost ~]# rpm -qa|grep libpng
libpng-1.2.10-7.1.el5_0.1
libpng-devel-1.2.10-7.1.el5_0.1
[root@localhost ~]# rpm -qa|grep libXpm
libXpm-3.5.5-3
libXpm-devel-3.5.5-3
[root@localhost ~]# rpm -qa|grep gettext
gettext-devel-0.14.6-4.el5
gettext-0.14.6-4.el5
上述有不齐全的包通过yum安装或直接安装相应的rpm包
下载libiconv并通过./configure --prefix=/usr/local/libiconv && make && make install编译安装
三、编译安装
1、The configure's --help
`configure' configures GD 2.0.34 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help | display this help and exit |
--help=short | display options specific to this package |
--help=recursive | display the short help of all the included packages |
-V, --version | display version information and exit |
-q, --quiet, --silent | do not print 'checking...' messages |
--cache-file=FILE | cache test results in FILE [disabled] |
-C, --config-cache | alias for '--cache-file=config.cache' |
-n, --no-create | do not create output files |
--srcdir=DIR | find the sources in DIR [configure dir or '..'] |
Installation directories:
--prefix=PREFIX | 按构架无关方式将软件安装到目录PREFIX下 |
--exec-prefix=EPREFIX | 按构架依赖方式将软件安装到目录PREFIX下 |
注:默认按构架无关方式安装到目录PREFIX下
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR | 可执行文件位置 user executables [EPREFIX/bin] |
--sbindir=DIR | 系统管理员可执行文件位置user executables [EPREFIX/bin] |
--libexecdir=DIR | 软件执行文件位置(由软件调用,非用户调用) user executables [EPREFIX/bin] |
--sysconfdir=DIR | 只读单机数据read-only single-machine data [PREFIX/etc] |
--sharedstatedir=DIR | 修改的构架无关的数据modifiable architecture-independent data [PREFIX/com] |
--localstatedir=DIR | 只读单机数据modifiable single-machine data [PREFIX/var] |
--libdir=DIR | 对象代码库object code libraries [EPREFIX/lib] |
--includedir=DIR | C语言的头文件库C header files [PREFIX/include] |
--oldincludedir=DIR | 不用GCC编译时使用的C语言的头文件库C header files for non-gcc [/usr/include] |
--datarootdir=DIR | 只读的构架无关的数据文件夹read-only arch.-independent data root [PREFIX/share] |
--datadir=DIR | 只读构架无关数据文件夹read-only architecture-independent data [DATAROOTDIR] |
--infodir=DIR | 信息文档info documentation [DATAROOTDIR/info] |
--localedir=DIR | 依赖区域设置的数据(个人理解为实时数据)locale-dependent data [DATAROOTDIR/locale] |
--mandir=DIR | man类型的说明文档man documentation [DATAROOTDIR/man] |
--docdir=DIR | GD的说明文档根目录documentation root [DATAROOTDIR/doc/gd] |
--htmldir=DIR | html类型的说明文档html documentation [DOCDIR] |
--dvidir=DIR | dvi接口类型的说明文档dvi documentation [DOCDIR] |
--pdfdir=DIR | pdf类型的说明文档pdf documentation [DOCDIR] |
--psdir=DIR | ps类型的说明文档ps documentation [DOCDIR] |
Program names:
--program-prefix=PREFIX | 给安装程序的执行文件添加的前缀名prepend PREFIX to installed program names |
--program-suffix=SUFFIX | 给安装程序的执行文件添加的后缀名append SUFFIX to installed program names |
--program-transform-name=PROGRAM | 指定安装程序时运行的sed程序run sed PROGRAM on installed program names |
X features:
--x-includes=DIR | X程序的头文件所在目录X include files are in DIR |
--x-libraries=DIR | X程序的代码库所在的目录X library files are in DIR |
System types:
--build=BUILD | 指定系统类型configure for building on BUILD [guessed] |
--host=HOST | 指定交叉编译所产生的目标代码运行的主机平台cross-compile to build programs to run on HOST [BUILD] |
--target=TARGET | 指定交叉编译所产生的目标代码类型configure for building compilers for TARGET [HOST] |
Optional Features:
--disable-FEATURE | 关闭特征选项do not include FEATURE (same as --enable-FEATURE=no) |
--enable-FEATURE[=ARG] | 启用特征选项include FEATURE [ARG=yes] |
--disable-dependency-tracking | 通过关闭依赖文件查找来加快(编译过程)speeds up one-time build |
--enable-dependency-tracking | 启用依赖文件查找do not reject slow dependency extractors |
--enable-shared[=PKGS] | 建立共享代码库build shared libraries [default=yes] |
--enable-static[=PKGS] | 建立静态代码库build static libraries [default=yes] |
--enable-fast-install[=PKGS] | 启用优化的快速安装模式optimize for fast installation [default=yes] |
--disable-libtool-lock | 避免死锁,(可能会破坏同时进行的编译)avoid locking (might break parallel builds) |
--disable-rpath | 不使用硬编码运行时库的路径do not hardcode runtime library paths |
Optional Packages:
--with-PACKAGE[=ARG] | 使用封装use PACKAGE [ARG=yes] |
--without-PACKAGE | 禁用封装do not use PACKAGE (same as --with-PACKAGE=no) |
--with-gnu-ld | 使C编译器使用“GNU ld”assume the C compiler uses GNU ld [default=no] |
--with-pic | 尝试仅使用PIC /非PIC对象 try to use only PIC/non-PIC objects [default=use both] |
--with-tags[=TAGS] | 包含额外配置include additional configurations [automatic] |
--with-x | 使用X系统use the X Window System |
--with-libiconv-prefix[=DIR] | 设定libconv库路径search for libiconv in DIR/include and DIR/lib |
--without-libiconv-prefix | 不使用libiconv库don't search for libiconv in includedir and libdir |
--with-png=DIR | 设定PNG库路径where to find the png library |
--with-freetype=DIR | 设定freetype库路径where to find the freetype 2.x library |
--with-fontconfig=DIR | 设定fontconfig库路径 where to find the fontconfig library |
--with-jpeg=DIR | 设定jpeg库路径where to find the jpeg library |
--with-xpm=DIR | 设定xpm库路径where to find the xpm library |
注:1、libiconv:字符集转换软件;2、freetype字体引擎,它提供统一的接口来访问多种字体格式文件;3、Fontconfig主要的功能是根据应用程序对字体的要求,在字库数据库中尽量匹配一种字体;4、XPM(XPixMap)图形格式在X11中是一个标准格式,它把图形保存成ASCII文本,一个XPM的定义不仅仅是ASCII形式,它的格式还可以是 C源代码形式的,可以直接将它编辑到自己的应用程序中去
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L
nonstandard directory
LIBS libraries to pass to the linker, e.g. -l
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I
you have headers in a nonstandard directory
CPP C preprocessor
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CXXCPP C++ preprocessor
F77 Fortran 77 compiler command
FFLAGS Fortran 77 compiler flags
XMKMF Path to xmkmf, Makefile generator for X Window System
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <
以上是个人翻译的GD2.0.34的configure选项的翻译,仅代表个人观点(翅儿学飞2009-8-15)
config.cache | 保存结果并使下次编译加速(前提环境不变) |
config.status | 创建SHELL脚本以便以后重建当前配置 |
config.log | 包含检测的输出结果,主要用于调试configure |
config.sub | 查找系统类型,如果软件包无此文件,说明此包不需要确定系统类型 |
config.site | 设定编译默认值,configure从PREFIX/share/config.site的路径寻找此文件(可以使用CONFIG_SITE来重新定位此文件位置)注意并不是所有的configure都支持该选项 |
4、关于make的常用用法
all
此目标的动作是编译整个软件包。 “all”应该为Makefile的终极目标。该目标的动作不重建任何文档(只编译所有的源代码,生成可执行程序) ;Info文件应该作为发布文件的一部分,DVI文件只在明确指定的时候才应该被重建。缺省情况下,对所有源程序的编译和连接应该使用选项“-g” ,是最终的可执行程序中包含调试信息。当最终的可执行程序不需要包含调试信息时,可使用“strip”去掉可执行程序中的调试符号以减小最终的程序大小。
install
此目标的动作是完成程序的编译并将最终的可执行程序、 库文件等拷贝到安装的目录。 如果只是验证这些程序是否可被正确安装, 它的动作应该是一个测试安装动作。安装时一般不要对可执行程序进行strip(去掉可执行程序内部的调试信息) 。“install”目标定义的动作在安装目录不存在时,能够创建这些不存在的安装目录。这些目录包括:变量“prefix”和“exec_prefix”指定的目录和所有必要的子目录。完成此任务的方式可以使用下边介绍的“installdirs”目标。在安装man文档的命令前使用“-”忽略这安装命令的错误,这样可以避免在没有Unix man文档的系统上执行安装时出现错误。安装Info文档的方法是使用变量 “INSTALL_DATA”将Info文档拷贝到 “$(infodir)”目录下去(参考 14.4安装目录的变量 一节) ,如果存在“install-info”命令则执行它。 “install-info”是一个编辑Info“dir”文件的程序,更新或者修改“info”文档的入口和目录;它是Texinfo软件包的一部分。
目标install的命令需要分为三类: 正常命令、 预安装命令和安装后命令。
install-strip
和目标install的动作类似,但是install-strip指定的命令在安装时对可执行文件进行strip(去掉程序内部的调试信息) 。如果软件包的存在安装脚本时,目标install-strip所定义的命令就不能是对目标“install”的引用,它仅仅完成对可执行文件的strip。“install-strip”不应该直接在build目录下对可执行文件进行strip,应该是对安装目录下的可执行文件进行strip。就是说“install-strip”所定义的命令不能对build
目录下的文件产生影响。一般不建议安装时对可执行文件进行strip,因为去掉可执行文件的调试信息后,如果在程序中存在bug,就不能通过gdb对程序进行调试。
installdirs
使用目标“installdirs”创建安装目录以及它的子目录在很多场合是非常有用的。脚本“mkinstalldirs”就是为了实现这个目的而编写的;发布的Texinfo软件包中就包含了这个脚本文件。该规则不能更改软件的编译目录,仅仅是创建程序的安装目录。
check
此目标指定的命令完成所有的自检功能。 在执行检查之前, 应确保所有程序已经被创建,可以不安装。为了对它们进行测试,需要实现在程序没有安装的情况下被执行的规则命令。
installcheck
执行安装检查。在执行安装检查之前,确保所有程序已经被创建并且被安装。需要注意的是:安装目录“$(bindir)”是否在搜索路径中。
uninstall
删除所有已安装文件——由install创建的文件拷贝。规则所定义的命令不能修改编译目录下的文件,仅仅是删除安装目录下的文件。像install目标的命令一样,
uninstall目标的命令也分为三类。
clean
清除当前目录下编译生成的所有文件, 这些文件在make过程中产生。 注意,clean动作不能删除软件包的配置文件,同时也不能删除build时创建的那些文件(诸如:目录、build生成的信息记录文件等) 。因为这些文件都是发布版本的一部分。对于.dvi文件,当它不作为发布版本的一部分时,可以删除。
distclean
类似于目标clean, 但增加删除当前目录下的的配置文件、 build过程产生的文件。目标“distclean”指定的删除命令应该删除软件包中所有非发布文件。
mostlyclean
类似于目标“clean” ,但是可保留一些编译生成的文件,避免在下次编译时对这些文件重建。例如,对于gcc来说,此目标指定的命令不删除文件“libgcc.a” ,因为在绝大多数情况下它都不需要重新编译。
maintainer-clean
此目标所定义的命令几乎会删除所有当前目录下能够由Makefile重建的文件。典型的,包括目标“distclean”删除的文件、由Bison生成的.c源文件、tags记录文件、Ifon文件等。但是有一个例外,就是执行“make maintainer-clean”不能删除“configure”这个配置脚本文件,即使“configure”可以由Makefile生成。因为“configure”是软件包的配置脚本。目标“maintainer-clean”应该只能由维护软件包的用户使用,而不能被普通用户使用。 因为它会删除一些软件包的发布文件, 而重建这些文件可能需要专门的工具。因此我们在使用此目标是需要小心。
TAGS
此目标所定义的命令完成对该程序的tags记录文件的更新。tags文件通常可被
编辑器作为符号记录文件,例如vim,Emacs等。
info
产生必要的Info文档。必须在Makefile中定义变量“MAKEINFO” ,代表命令工具makeinfo,该工具是发布软件Texinfo的一部分。通常,GNU的发布程序会和Info文档会被一同创建,这意味着Info文档是在源文件的目录下。用户在创建发布软件时,一般情况下,make不更新Info文档,因为它们已经更新到最新了。
dvi
为所有的Texinfo文件创建对应的DVI文件。必须在Makefile中定义变量“TEXI2DVI” 。它代表命令工具texi2dvi,该工具是发布软件Texinfo一部分。规则中也可以没有命令行,这样make程序会自动为它推导对应的命令。
dist
此目标指定的命令创建发布程序的tar文件。创建的tar文件应该是这个软件包的目录,文件名中也可以包含版本号(就是说创建的tar文件在解包之后应该是一个目录) 。目标“dist”的依赖文件为软件包中所有的非源代码的文件,因此在使用目标进行发布软件打包压缩之前必须保证这些文件是最新的。
4、安装选项
./configure --prefix=/usr/local/gd/ --enable-shared --enable-static --with-libiconv-prefix=/usr/local/libiconv/ --with-png --with-freetype --with-fontconfig --with-jpeg --with-xpm
make
make install