|
刚毕业!来到一家小公司,完全没有经验的我,老大叫我先学会在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兼容问题-------
在64位linux系统下编译文件时,经常会碰到以下错误提示:
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的)
|
|