下载
具体解释一下,build就是你正在使用的机器,host就是你编译好的程序可以运行的平台,target就是你编译的程序可以处理的平台.这个build和host比较好理解,但是target就不好办了,到底什么意思呢?一般来说,我们平时所说的交差编译用不到他target的,比如./configure --build=i386-linux,--host=arm-linux就可以了,在386的平台上编译可以运行在arm板的程序.但是,一般我们都是编译程序,而不是编译工具,如果我们编译工具,比如gcc,这个target就有用了.如果我们需要在一个我们的机器上为arm开发板编译一个可以处理mips程序的gcc,那么target就是mips了.不知道我的解释是否正确,如果大家看到了这篇帖子,觉得不对,批评指正.
--target=arm-linux 可以不用
./configure CC=/home/self dir/arm-none-linux-gnueabi-gcc --target=arm-linux --host=arm-linux --prefix=/self dir/bin --enable-shared --enable-static
make
make install
在bin目录链接静态库
/home/self dir/arm-none-linux-gnueabi-gcc -o in in.c -L. -liconv
执行./in
如果动态库没有下载到嵌入式lib目录会提醒找不到libiconv.so.2 下载 libiconv.so.2.5.1 然后 mv libiconv.so.2.5.1 libiconv.so.2
in.c
#include <iconv.h>
#define OUTLEN 255
main()
{
char in_utf8[] = "姝e?ㄥ??瑁?";
char in_gb2312[] = "正在安装";
char out[OUTLEN];
int rc;
//unicode码转为gb2312码
rc = u2g(in_utf8,strlen(in_utf8),out,OUTLEN);
printf("unicode-->gb2312 out=%sn\n",out);
//gb2312码转为unicode码
in_gb2312[1] = 0;
rc = g2u(in_gb2312,strlen(in_gb2312) ,out,OUTLEN);
printf("gb2312-->unicode out=%sn\n",out);
}
//代码转换:从一种编码转为另一种编码
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
iconv_t cd;
int rc;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if (cd==0) return -1;
memset(outbuf,0,outlen);
if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;
iconv_close(cd);
return 0;
}
//UNICODE码转为GB2312码
int u2g(char *inbuf,int inlen,char *outbuf,int outlen)
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312码转为UNICODE码
int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
printf("gb len %d\n", inlen);
return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}