刚毕业!来到一家小公司,完全没有经验的我,老大叫我先学会在suse 64位系统下安装  mysql_apache+php+zend!! 而且要全部编译32位的!!之前也没有听说过什么64位32位,现在自己亲身编译过之后才发现!非常痛苦。为了记录我这个菜鸟的成长。写了这个文档。希望有相同遭遇的同学可以参考一下。(
 
以上3个软件下所有依赖库全部跟着一起安装成32bit
 
 
rpm -qa|egrep "(freetype|xml2|jpeg|png|gd|zlib|mcrypt)"|grep 32bit
                         i.              zlib-32bit-1.2.3-106.34
                         ii.              freetype2-32bit-2.3.7-25.8
                         iii.              libxml2-32bit-2.7.1-10.8
                         iv.              libpng12-0-32bit-1.2.31-5.10
                         v.              zlib-devel-32bit-1.2.3-104.137
                         vi.              libpng-devel-32bit-1.2.31-4.23
检查是否安装好了各种依赖库
Ps: 全部源程序放在/usr/local/src      编译后的程序放在/usr/local/***
全部./configure参数前加-m32编译:
 CC="gcc" CFLAGS="-O3 -m32" CXXFLAGS="-O3 -m32" \
./configure  \\这里加你自己需要的编译功能
 
安装心得
suse linux 64bit 下编译  这些软件绝对是件很痛苦的事,linux下的安装依赖条件太多,而且又要编译32位的
 
让我郁闷很久的错误:
 
以上有一些依赖库虽然用的是源码编译但是最后还是抱错显示
*******.h not found(头文件没找到)    最后只能打上系统光盘上带的***-devel.rpm !但是又因为要32bit!
所以有得上网去下载32bit devel包方可解决
 
  make: ./libtool: Command not found
  make: *** [jcapimin.lo] Error 127
 
解决办法:
  whereis libtool   //找到libtool所在地,直接把libtool拷贝到当前文件夹!比如找到/usr/bin/libtool ,执行以下命令
  cp /usr/bin/libtool .
 
然后make顺利通过
 
------------64bit/32bit兼容问题-------
 
64linux系统下编译文件时,经常会碰到以下错误提示:
 
relocation R_X86_64_32 can not be used when making a shared object; recompile with -fPIC
 
出现以上错误提示,只需要在Makefile里找到 CFLAGS = xxx , 然后在后面加上 -fPIC即可解决。
  
:经典抱错
lo sapi/apache2handler/php_functions.lo main/internal_functions.lo -lcrypt -lcrypt -lrt -lmysqlclient -lmcrypt -lltdl -lfreetype
-lpng -lz -ljpeg -lz -lresolv -lm -ldl -lnsl -lxml2 -lz -lm -lxml2 -lz -lm -lmysqlclient -lz -lcrypt -lnsl -lm -lmysqlclient
 -lz -lcrypt -lnsl -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt  -o libphp5.la
/usr/local/lib/libmcrypt.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1    ///明明安装了libmycrpt 32bit!但是却抱错,打开MakeFile一看,原来里面查找libmycrypt.so路径错误,去了lib64函数库找libmcrypt, 而我们编译的是32位的!所以需要32位的libmcrypt.
打开makefile!寻找-lcrypt(lcrypt=libcrypt) 错误路径显示/usr/local/lib64,改成/usr/local/lib/  因为编译的是32bit系统
 
64bit  suse linux下编译这套软件,主要问题集中在   32bit/64bit 间的兼容问题
 打开Makfile 文件在
 EXTRA-LIBS=*****************把写有libmycrypt.so地方改成那个32bit  /usr/lib 路径
  
还有一个错误也是很常见
usr/bin/ld: skipping incompatible /usr/lib64/libmysqlclient.a when searching for -lmysqlclient
/usr/bin/ld: skipping incompatible /usr/lib64/libmysqlclient.a when searching for –lmysqlclient 
  因为我们编译的是32bit 软件!错误信息显示在lib64函数库里寻找  所要的东西
解决办法和上面相同
必要时    grep –n –r “要找的文件” .   寻找这里源码包里含有这个文件名字的文件!改一下路径
ps:当源码下的有很多子目录!所以有很多makfile!一个一个改不太实际。
可以把错误信息里需要的***.so!到/usr/lib里复制到 /usr/lib64!而把原本lib64的那个***.so暂时改一下名字。(可能lib64里需要的某些***.so里!usr/lib里面没。这样你得检查下你的zlib有没有安装!记得也是要32bit的)