与在Solaris系统上不同,Linux的libc库中包含了libiconv库中函数的定义,因此在Linux上使用libiconv库相关函数,编译时是不需要显式-liconv的。但最近我的一位同事在某redhat enterprise server 5.6机器上编译程序时却遇到了找不到iconv库函数符号的链接问题,到底是怎样一回事呢?这里分享一下问题查找过程。
一、现场重现
这里借用一下这位同事的测试程序以及那台机器,重现一下问题过程:
/test.c/include
int main(void)
{
int r;
char *sin, *sout;
size_t lenin, lenout;
char *src = "你好!";
char dst[256] = {0};
iconv_t c_pt;
sin = src;
lenin = strlen(src)+1;
sout = dst;
lenout = 256;
if ((c_pt = iconv_open("UTF-8", "GB2312")) == (iconv_t)(-1)){
printf("iconv_open error!. errno[%d].\n", errno);
return -1;
}
if ((r = iconv(c_pt, (char **)&sin, &lenin, &sout, &lenout)) != 0){
printf("iconv error!. errno[%d].\n", r);
return -1;
}
iconv_close(c_pt);
printf("SRC[%s], DST[%s].\n", src, dst);
return 0;
}
根据之前的经验,我们按如下命令编译该程序:$> gcc -g -o test test.c
/tmp/ccyQ5blC.o: In function `main':
/home/tonybai/tmp/test.c:28: undefined reference to `libiconv_open'
/