« 如何去掉rsync 2.6.8对iconv库的调用? »
Developer » http://www.anysql.net/developer/remove_rsync268_iconv.html 2006-10-16最近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下编译成功的.


Recent Comments