libiconv-1.14.tar.gz在arm上的移植

通过交叉编译工具链生成arm平台上的iconv链接库和头文件
操作系统:centos6.5
libiconv-1.14.tar.gz下载地址:http://download.csdn.net/detail/shanleichicheng/4538600
交叉编译工具链:http://blog.csdn.net/qq_22790049/article/details/52452445

1、解压源码

tar -xzvf libiconv-1.14.tar.gz

2、建立存放编译生成的文件夹

mkdir /usr/local/icon-arm-linux

3、进入源码进行配置

#cd libiconv-1.14
#./configure --host=arm-linux --prefix=/usr/local/iconv-arm-linux

4、编译

#make
....
#make install
....

5、编译生成
在配置的时候我们指定了交叉工具链和生成路径
在编译生成路径的目录下,bin目录为生成的命令,include为生成的头文件,lib为生成的动态链接库。此时我们就可以运用头文件和动态链接库进行编程了,注意在编译的时候一定要链接这个动态库,在执行时将动态库放入/lib目录下。

6、在makefiel文件中使用-liconv调用libiconv动态库文件时,若出现“error while loading sharedlibraries: libiconv.so.2”错误,解决方法为:

$updatedb

$locate libiconv.so.2

发现该库已经安装,位置在/usr/local/lib/libiconv.so.2。既然已经安装,为什么提示找不到?继续下一步排查。

strace./indexerindexerlibiconv.so.2/lib/usr/lib/usr/local/lib/usr/lib ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2

$ldconfig

7、头文件

#ifndef CODE_CONVERT___H
#define CODE_CONVERT___H
#include "iconv.h"
/*iconv.h该文件在编译库中,编译程序时加动态库*/
#include <string>
//#include <iostream>
//using namespace std;
class code_convert
{
    public:
        int code_converts(char *from_charset,char *to_charset,char *inbuf,size_t inlen,char *outbuf, size_t outlen);
        int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen);
        int u2g(char *inbuf,size_t inlen,char *outbuf,size_t outlen);
    protected:
    private:
};

#endif // CODE_CONVERT_H

8、c文件

#include "code_convert.h"
#include <stdio.h>
#include <string.h>

int code_convert::code_converts(char *from_charset,char *to_charset,char *inbuf,size_t inlen,char *outbuf, size_t outlen)
{
    iconv_t cd;
    char **pin = &inbuf;
    char **pout = &outbuf;

    cd = iconv_open(to_charset,from_charset);
    if (cd==0){
        printf("iconv_open error!\n");
        return -1;
    }

    memset(outbuf,0,outlen);
    if(iconv(cd,pin,&inlen,pout,&outlen) == -1){
            memcpy(outbuf,inbuf,inlen);
        printf("iconv error!\n");
        return -1;
    }

    iconv_close(cd);
    return 0;
}
//UNICODE
int code_convert::u2g(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
    return code_converts((char *)"utf-8",(char *)"gb2312",(char *)inbuf,inlen,(char *)outbuf,outlen);
}
//GB2312
int code_convert::g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
    return code_converts((char *)"gb2312",(char *)"utf-8",(char *)inbuf,inlen,(char *)outbuf,outlen);
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
libconv在windows系统的移植,编译,测试工程代码 确实有需要的请下载使用。以下是测试代码 #include <stdlib.h> //include <sys/ipc.h> #include <stdio.h> #include <string.h> //#include <fcntl.h> //include <unistd.h> #include <iconv.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; size_t iconv_ret; cd = iconv_open(to_charset,from_charset); if (cd==(iconv_t)-1) { perror("iconv_open():"); exit(0); } memset(outbuf,0,outlen); iconv_ret = iconv(cd,pin,&inlen,pout,&outlen); if (iconv_ret == (size_t)-1) { perror("iconv():"); exit(0); } 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); } /* 这是一个iconv的测试例程: “纵海杯”东南大学第三届嵌入式系统设计邀请赛 */ int main(void) { 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,0x0a,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,0x00}; //UTF-8编码 char in_gb2312[] =" 这是一个iconv的测试例程:\n\ “纵海杯”东南大学第三届嵌入式系统设计邀请赛"; //GB2312编码 char out[256]; int rc; printf("\r\n------iconv test------\r\n"); printf("\r\n---Start UTF8 to GB2312 convert...\r\n"); rc = u2g(in_utf8,strlen(in_utf8),out,256); printf("%s\n",out); rc = strcmp(in_gb2312,out); if(rc==0) { printf("---End UTF8 to GB2312 convert OK\r\n"); } else { printf("---End UTF8 to GB2312 convert FAIL\r\n"); } printf("\r\n---Start GB2312 to UTF8 convert...\n"); rc = g2u(in_gb2312,strlen(in_gb2312),out,256); printf("%s\n",out); rc = strcmp(in_utf8,out); if(rc==0) { printf("---End GB2312 to UTF8 convert OK\r\n"); } else { printf("---End GB2312 to UTF8 convert FAIL\r\n"); } printf("\r\n------iconv test over------\r\n"); system("pause");; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值