32位与64位Linux库体积差异过大,求验证及排查方法
32位Linux库编译验证与体积异常排查
库体积异常现象
编译的32位库体积普遍远小于对应64位版本,但glibc是例外:
- 32位
libpng12.so.0.14.0仅203KB,64位版本为513KB - 32位
libfreetype.so.6.3占595KB,64位版本达1.9MB - 32位glibc体积更大:32位
ld-2.18.so为156KB,64位ld-2.17.so为669KB(版本不同但差异过于显著)
编译命令差异
通用32位库编译命令
CFLAGS (or CPPFLAGS)=-m32 ./configure --prefix=/... --host=i686-gnu-linux
32位glibc编译命令
CC="gcc -m32 -march=core2 -mtune=core2 -O2" CXX="g++ -m32 -march=core2 -mtune=core2 -O2" ../configure --prefix=/media/34GB/Arquivos-de-Programas-Linux-32bit/Glibc-2.17/ --build=x86_64-linux-gnu --host=i686-gnu-linux --enable-kernel-2.6.32 --enable-profile
64位glibc编译命令
CFLAGS="-march=core2 -mtune=core2 -O2" ../configure --prefix=/media/34GB/Arquivos-de-Programas-Linux/Glibc-2.18/ --enable-kernel=2.6.32 --enable-profile
测试运行问题
尝试用以下命令运行32位Hello World程序时出现段错误,无法确定是glibc本身问题,还是与64位辅助库冲突:
./ld-linux.so.2 --library-path /media/34GB/Arquivos-de-Programas-Linux/Gcc-4.9.4/lib32/ /home/leopoldo/Desktop/test-32bit
需要明确如何验证编译出的32位库(尤其是通用库)是否正确,避免花费大量时间编译错误库。
补充:自定义GCC编译配置
编译GCC时使用的命令:
../configure --prefix=/media/34GB/Arquivos-de-Programas-Linux/Gcc-4.9.4 --disable-checking --enable-languages=c,c++ --enable-multiarch --enable-multlib --with-multilib-list=m32,m64 --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu make -j2 BOOT_CFLAGS='-O' bootstrap
安装后做了以下操作:将系统libstdc++.so.6.0.13重命名为bak后缀,删除原libstdc++.so.6符号链接,新建指向GCC目录下libstdc++.so.6.0.20的链接。
内容的提问来源于stack exchange,提问作者user2752471
相关产品推荐
相关产品推荐

