如何去掉rsync 2.6.8对iconv库的调用?

    最近rsync (2.6.5)遇到了几次拷贝大文件(8GB)挂起(发起拷贝命令的程序不肯退出)的情况, 于是在网上找新版本, 在2.6.8版本的Bug修复列表中找到了一些和这个有关的修正(也不确定), 于是下载了源代码来自已编译, 希望可以解决我们遇到的问题.

    在编译过程中, 遇到了iconv包的问题, 在2.6.8中引入了一些新功能(还不清楚), 需要用到字符集转换包(iconv)的库, 我们有很多的机器上都没有装这些包, 因此要去掉对这个包的调用, 让rsync程序拷贝到目标机器就可以运行, 下面是移除的步骤:

    1, 在configure程序中将iconv.h改成iconv1.h

for ac_header in sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
  unistd.h utime.h grp.h compat.h sys/param.h ctype.h sys/wait.h \
  sys/ioctl.h sys/filio.h string.h stdlib.h sys/socket.h sys/mode.h \
  sys/un.h glob.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \
  netdb.h malloc.h float.h limits.h iconv1.h libcharset.h langinfo.h

    2, 运行configure命令来配置编译选项

./configure --with-included-popt --with-rsh=/usr/bin/rsh --disable-ipv6 --disable-locale --disable-debug

    3, 编辑Makefile文件, 将下面这一行的"-liconv"去掉

LIBS=-liconv -lsocket -lnsl

    4, 运行make命令来编译rsync可执行文件

    5, 用ldd来检查rsync运行需要的库包

ldd rsync
        libsocket.so.1 =>        /usr/lib/libsocket.so.1
        libnsl.so.1 =>   /usr/lib/libnsl.so.1
        libc.so.1 =>     /usr/lib/libc.so.1
        libdl.so.1 =>    /usr/lib/libdl.so.1
        libmp.so.2 =>    /usr/lib/libmp.so.2
        /usr/platform/SUNW,Sun-Fire-880/lib/libc_psr.so.1

    我在Sun Solaris 5.8下编译成功的.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • What about another dance?
  • 再跳一曲好吗?
  • You're a good dancer.
  • 你舞跳的真好.
  • What's on Channel 8 now?
  • 现在8频道播什么节目?
  • I don't know. You may look in the TV Guide.
  • 我不知道, 你可以看看【电视报】.
  • Let's see what else is on.
  • 咱们看看有没有别的节目.