主题 : 交叉编译libiconv 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 60773
精华: 0
发帖: 78
金钱: 395 两
威望: 79 点
综合积分: 156 分
注册时间: 2011-12-16
最后登录: 2013-07-11
楼主  发表于: 2012-08-18 17:07

 交叉编译libiconv

  我交叉编译的方法如下 /configure  --host=arm-linux --enable-shared  --enable-static --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/
然后写的测试例子如下:
  #include <stdio.h>
#include <iconv.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <time.h>
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)    
{
iconv_t cd;
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;
}
int u2g(char *inbuf,int inlen,char *outbuf,int outlen)   //UNICODE码转为GB2312码
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)  //GB2312码转为UNICODE码
{
return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}

int main()
{
  unsigned char in_utf8[] = {0x20,0xe8,0xbf,0x99,0xe6,0x98,0xaf,0xe4,0xb8,0x80,0xe4,0xb8,0xaa,0x69,0x63,0x6f,0x6e,0x76,0xe7,0x9a,0x84,0xe6,0xb5,0x8b,0xe8,0xaf,0x95,0xe4,0xbe,0x8b,0xe7,0xa8,0x8b,0xef,0xbc,0x9a,0xa,0xe2,0x80,0x9c,0xe7,0xba,0xb5,0xe6,0xb5,0xb7,0xe6,0x9d,0xaf,0xe2,0x80,0x9d,0xe4,0xb8,0x9c,0xe5,0x8d,0x97,0xe5,0xa4,0xa7,0xe5,0xad,0xa6,0xe7,0xac,0xac,0xe4,0xb8,0x89,0xe5,0xb1,0x8a,0xe5,0xb5,0x8c,0xe5,0x85,0xa5,0xe5,0xbc,0x8f,0xe7,0xb3,0xbb,0xe7,0xbb,0x9f,0xe8,0xae,0xbe,0xe8,0xae,0xa1,0xe9,0x82,0x80,0xe8,0xaf,0xb7,0xe8,0xb5,0x9b};    //UTF-8编码
char out[100];
int rc;
rc = u2g(in_utf8,strlen(in_utf8),out,100);
printf("ddddddd%s\n",out);
char uOut[100],inG[100];
char *p="utf-8编码的问题\n";
printf("pppp:%s\n",p);
sprintf(inG,"%s",p);
  rc=g2u(inG,16,uOut,100);
printf("utf-8 %s\n",uOut);

}
编译方法如下: arm-linux-gcc -o word wordtest.c -libconv
报如下错误:
/opt/FriendlyARM/toolschain/4.5.1/lib/gcc/arm-none-linux-gnueabi/4.5.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -libconv

用arm-linux-gcc -o word wordtest.c -Llibconv
却出现: [attachment=4362]
附件设置隐藏,需要回复后才能看到
级别: 侠客
UID: 60773
精华: 0
发帖: 78
金钱: 395 两
威望: 79 点
综合积分: 156 分
注册时间: 2011-12-16
最后登录: 2013-07-11
1楼  发表于: 2012-08-18 17:08
奇了怪了,我在测试程序里面也加了iconv.h的路径但是就是不行,换了一个libiconv版本也还是这样
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
2楼  发表于: 2012-08-20 12:16
--prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/
这个可能是不合适的

你可以检查一下make install后,文件都安装到哪了,如果是错误的安装位置,那么必须在编译测试程序时找不到库
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2012-08-20 13:25

编译方法如下: arm-linux-gcc -o word wordtest.c -libconv

正确的"-l"参数用法是arm-linux-gcc -o word wordtest.c -liconv. 前提是在你的交叉编译器库搜索路径中存在libiconv.so
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 60773
精华: 0
发帖: 78
金钱: 395 两
威望: 79 点
综合积分: 156 分
注册时间: 2011-12-16
最后登录: 2013-07-11
4楼  发表于: 2012-08-20 22:14
我看了一下在arm-none-linux-gnueabi/lib arm-none-linux-gnueabi/include 下面啊,但是我在4.5.1目录下搜索到的是arm-none-linux-gnueabi/sys-root/lib /include ,而不是arm-none-linux-gnueabi/lib /incldue下面,这是怎么回事
级别: 侠客
UID: 60773
精华: 0
发帖: 78
金钱: 395 两
威望: 79 点
综合积分: 156 分
注册时间: 2011-12-16
最后登录: 2013-07-11
5楼  发表于: 2012-08-20 22:18

 回 3楼(kasim) 的帖子

谢谢你,我试了一下这个命令确实可以编译,明天去板子上试一试
级别: 侠客
UID: 60773
精华: 0
发帖: 78
金钱: 395 两
威望: 79 点
综合积分: 156 分
注册时间: 2011-12-16
最后登录: 2013-07-11
6楼  发表于: 2012-08-20 22:20
原来arm-none-linux-gnueabi/lib /incldue和arm-none-linux-gnueabi/sys-root/usr/lib /include 下面的文件都一样的我擦