libiconv交叉编译

本文介绍libiconv的编译编译过程。

一、准备工作

本文编译宿主机为ubuntu 16.04 64 bit,交叉编译器为arm-linux 4.6.2
下载libiconv源码。地址:

1
http://ftp.gnu.org/pub/gnu/libiconv/

下载的文件为libiconv-1.14.tar.gz

二、编译

将压缩包放到/home/latelee/tools目录。解压、配置:

1
2
3
tar zxf libiconv-1.14.tar.gz 
cd libiconv-1.14/
./configure --prefix=/home/latelee/bin/libiconv --enable-static --disable-shared --host=arm-linux

本文配置为静态编译。
编译安装:

1
2
make -j
make install

/home/latelee/bin/libiconv目录将得到头文件目录和库目录。

三、使用

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "iconv.h"

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

memset(outbuf, '\0', outlen);
cd = iconv_open(fromcode, fromcode);
if (cd == 0)
{
perror("open iconv failed: ");
return -1;
}

if (iconv(cd, pin, &inlen, pout, &outlen) == -1)
{
perror("iconv failed: ");
return -1;
}

iconv_close(cd);
*pout = '\0';

return 0;
}

int utf2gbk(char *inbuf, size_t inlen, char *outbuf, size_t outlen)
{
return code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, outlen);
}

int gbk2utf(char *inbuf, size_t inlen, char *outbuf, size_t outlen)
{
return code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, outlen);
}

指定头文件目录、库目录,从略。

李迟 2019.4.1 周一 夜