linux使用iconv库问题,急急急!!!

baidu_24206777 2014-12-04 11:17:50
有A/B两台机器,都是linux,redhat
我写了一个简单的程序,main.cpp,引用<iconv.h>

#include <iostream>
#include <map>
#include <iconv.h>

using namespace std;

char* utf8_to_gbk(char *inbuf)
{
iconv_t cd = iconv_open("GBK", "UTF-8");
size_t inlen = 1500;
size_t outlen = inlen * 4;
char *outbuf = (char*)malloc(outlen);
bzero(outbuf, outlen);
char *in = inbuf;
char *out = outbuf;
iconv(cd, &in, (size_t*)&inlen, &out, &outlen);
iconv_close(cd);
return outbuf;
}

int gbk_to_utf8(char *inbuf, char *outbuf)
{
iconv_t cd = iconv_open("UTF-8", "GBK");
size_t inlen = 1500;
size_t outlen = inlen;
bzero(outbuf, outlen);
char *in = inbuf;
char *out = outbuf;
iconv(cd, &in, (size_t*)&inlen, &out, &outlen);
iconv_close(cd);
return 0;
}

int main()
{
std::map<int, int> imap;
cout << imap[1] << endl;
imap[1] = 1;
cout << imap[1] << endl;

return 0;
}



在A机器上直接g++ main.cpp -o test 能编译
在B机器上g++ main.cpp -o test 编译报:: undefined reference to `libiconv_open'

目的想让B机器也能直接g++ main.cpp -o test编译过,而不需要改变A机器的环境配置
查了一下,iconv是glibc里的,难道是A/B机器的glibc版本问题?
A:
rpm -qa | grep glibc
glibc-common-2.3.4-2.19
glibc-headers-2.3.4-2.19
warning: only V3 signatures can be verified, skipping V4 signature
glibc-2.3.4-2.19
glibc-kernheaders-2.4-9.1.98.EL
glibc-devel-2.3.4-2.19
warning: only V3 signatures can be verified, skipping V4 signature
warning: only V3 signatures can be verified, skipping V4 signature
glibc-2.3.4-2.19

gcc -v
Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.5/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=x86_64-redhat-linux
Thread model: posix
gcc version 3.4.5 20051201 (Red Hat 3.4.5-2)

B:
rpm -qa | grep glibc
glibc-common-2.3.4-2.19
glibc-headers-2.3.4-2.19
glibc-2.3.4-2.19
glibc-kernheaders-2.4-9.1.98.EL
glibc-devel-2.3.4-2.19
glibc-2.3.4-2.43.el4_8.2


gcc -v
从 /usr/lib/gcc/x86_64-redhat-linux/3.4.6/specs 读取 specs
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=x86_64-redhat-linux
线程模型:posix
gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)


求大神们指点如何解决?还需要什么信息?
...全文
154 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_24206777 2014-12-04
  • 打赏
  • 举报
回复
引用 1 楼 mymtom 的回复:
试试链接iconv库 g++ main.cpp -o test -liconv
这样是能编译过去, 但我要的就是不需要加后面这个 -liconv 因为在A机器上没有 这个库,这样在B上编译的程序拿到A上是跑不了的 就像通过配置B,达到在A机器上直接编译就能通过的效果
mymtom 2014-12-04
  • 打赏
  • 举报
回复
试试链接iconv库 g++ main.cpp -o test -liconv
JiangWenjie2014 2014-12-04
  • 打赏
  • 举报
回复
既然能在A机器上能编译,说明libiconv一定是有的。再说了你明明用了iconv却不在编译命令中显式地指定,是何居心?
zhxianbin 2014-12-04
  • 打赏
  • 举报
回复
如果 A 上没有 libiconv,应该是不能编译和运行的。 加 -liconv 是常规做法,解决的思路应该是 A 装上 iconv 库,而不是如何不加 -l 在 B 上编译

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧