
| GLIBC 版本 | 文件名称 |
| libc5 | /lib/libc.so.5 |
| libc6 | /lib/libc.so.6 |
| 想移植的程序名 | zoo |
| 用于安装兼容文件的目录地址的前缀 | /opt/compat-env/zoo |
| 需要的库 | glibc-2.3.2-95.27 |
| libgcc-3.2.3-42 | libstdc++-3.2.3-42 |
| 所需要文件最初的源目录 | /root/zoo-src |
% prefix=/opt/compat-env/zoo第二步
% mkdir -p $prefix/bin $prefix/lib
% srcdir=/root/zoo-src第三步
% cd $prefix/bin
% cp -p $srcdir/zoo .
% cd $prefix/lib
% rpm2cpio $srcdir/glibc-2.3.2-95.27*.rpm | cpio -idvm ‘*libc*.so*’
% find . -name ‘*libc*.so*’ -exec mv -v ‘{}’ . \;
% rpm2cpio $srcdir/glibc-2.3.2-95.27*.rpm | cpio -idvm ‘*ld*.so*’
% find . -name ‘*ld*.so*’ -exec mv -v ‘{}’ . \;
% rpm2cpio $srcdir/libgcc-3.2.3-42*.rpm | cpio -idvm ‘*libgcc_so*.so*’
% find . -name ‘*libgcc_so*.so*’ -exec mv -v ‘{}’ . \;
% rpm2cpio $srcdir/libstdc++-3.2.3-42*.rpm | cpio -idvm ‘*libstdc*.so*’
% find . -name ‘*libstdc*.so*’ -exec mv -v ‘{}’ . \;
% rm -rf lib usr
% cd $prefix/bin现在,zoo程序就能正常启动了,而且glibc, libgcc和libstdc++的版本也可以按照自己的需要规定了。
% mv zoo zoo.exec
% cat > zoo << EOF
#! /bin/bash
prefix=/opt/compat-env/zoo
LD_LIBRARY_PATH=”$prefix/lib${LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}}”
export LD_LIBRARY_PATH
$prefix/lib/ld-linux.so.2 ${0}.exec “$@”
EOF
% chmod 755 zoo
% cd $prefix/lib现在对刚才那个脚本进行对应的修改:
% cat > libcwait.c << EOF
#include
#include
#include
#include
pid_t __libc_wait (int *status)
{
int res;
asm volatile (”pushl %%ebx\n\t”
“movl %2, %%ebx\n\t”
“movl %1, %%eax\n\t”
“int $0×80\n\t”
“popl %%ebx”
: “=a” (res)
: “i” (__NR_wait4), “0″ (WAIT_ANY), “c” (status), “d” (0),
“S” (0));
return res;
}
EOF
% gcc -fpic -O2 -shared libcwait.c -o libcwait.so
% cd $prefix/bin
% cat > zoo << EOF
#! /bin/bash
prefix=/opt/compat-env/zoo
LD_LIBRARY_PATH=”$prefix/lib${LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}}”
export LD_LIBRARY_PATH
LD_PRELOAD=$prefix/lib/libcwait.so
export LD_PRELOAD
$prefix/lib/ld-linux.so.2 ${0}.exec “$@”
EOF
% chmod 755 zoo
| 欢迎光临 飞信机器人官方论坛 (http://bbs.it-adv.net/) | Powered by Discuz! 6.1.0 |