libiconv库裁剪

libiconv库裁剪阅读目录 libiconv 简介 libiconv 裁剪 1 libiconv 下载 2 libiconv 解压 3 修改源文件 4 由 aliases gperf 重新生成 aliases h5 配置 编译 libiconv 简介国际文本大多以 Unicode 编码 但是 由于历史原因 它有时仍使用语言或国家 地区相关的字符编码进行编码 随着互联网的出现以及各国之间频繁的文本交换 即使从外国查看网页也是这种情况下的 文

libiconv简介

国际文本大多以Unicode编码 。但是,由于历史原因,它有时仍使用语言或国家/地区相关的字符编码进行编码。随着互联网的出现以及各国之间频繁的文本交换 – 即使从外国查看网页也是这种情况下的“文本交换” – 这些编码之间的转换已成为必需。

特别是,具有Windows操作系统的计算机仍然使用传统(有限)字符编码在区域设置中运行。某些程序(如邮件程序和Web浏览器)必须能够在给定的文本编码和用户的编码之间进行转换。其他程序在内部以Unicode格式存储字符串,以便于内部处理,并且在进行I / O时需要在内部字符串表示(Unicode)和外部字符串表示(传统编码)之间进行转换。GNU libiconv是两种应用程序的转换库。

libiconv裁剪

1.libiconv下载

2.libiconv解压

以libiconv-1.11.tar.gz压缩包为例,解压:

tar -zxvf libiconv-1.11.tar.gz 

进入libiconv-1.11目录:

cd libiconv-1.11 

3.修改源文件

需要修改的文件只有两个,都在lib目录下,一个为aliases.gperf,另一个为encodings.def。

首先打开aliases.gperf,自上到下,直到CSISOLATIN1, ei_iso8859_1这一行,这些是需要保留的,然后剩下的就可以自由裁减了。

由于我只需要GB2312和GBK,所以后面的部分我只保留了下面几行:

EUC-CN, ei_euc_cn EUCCN, ei_euc_cn GB2312, ei_euc_cn CN-GB, ei_euc_cn CSGB2312, ei_euc_cn GBK, ei_ces_gbk 

其他的行全部删掉了,然后保存,修改后的aliases.gperf文件如下所示:

struct alias { int name; unsigned int encoding_index; }; %struct-type %language=ANSI-C %define hash-function-name aliases_hash %define lookup-function-name aliases_lookup %7bit %readonly-tables %global-table %define word-array-name aliases %pic %% US-ASCII, ei_ascii ASCII, ei_ascii ISO646-US, ei_ascii ISO_646.IRV:1991, ei_ascii ISO-IR-6, ei_ascii ANSI_X3.4-1968, ei_ascii ANSI_X3.4-1986, ei_ascii CP367, ei_ascii IBM367, ei_ascii US, ei_ascii CSASCII, ei_ascii UTF-8, ei_utf8 UCS-2, ei_ucs2 ISO-10646-UCS-2, ei_ucs2 CSUNICODE, ei_ucs2 UCS-2BE, ei_ucs2be UNICODEBIG, ei_ucs2be UNICODE-1-1, ei_ucs2be CSUNICODE11, ei_ucs2be UCS-2LE, ei_ucs2le UNICODELITTLE, ei_ucs2le UCS-4, ei_ucs4 ISO-10646-UCS-4, ei_ucs4 CSUCS4, ei_ucs4 UCS-4BE, ei_ucs4be UCS-4LE, ei_ucs4le UTF-16, ei_utf16 UTF-16BE, ei_utf16be UTF-16LE, ei_utf16le UTF-32, ei_utf32 UTF-32BE, ei_utf32be UTF-32LE, ei_utf32le UTF-7, ei_utf7 UNICODE-1-1-UTF-7, ei_utf7 CSUNICODE11UTF7, ei_utf7 UCS-2-INTERNAL, ei_ucs2internal UCS-2-SWAPPED, ei_ucs2swapped UCS-4-INTERNAL, ei_ucs4internal UCS-4-SWAPPED, ei_ucs4swapped C99, ei_c99 JAVA, ei_java ISO-8859-1, ei_iso8859_1 ISO_8859-1, ei_iso8859_1 ISO_8859-1:1987, ei_iso8859_1 ISO-IR-100, ei_iso8859_1 CP819, ei_iso8859_1 IBM819, ei_iso8859_1 LATIN1, ei_iso8859_1 L1, ei_iso8859_1 CSISOLATIN1, ei_iso8859_1 EUC-CN, ei_euc_cn EUCCN, ei_euc_cn GB2312, ei_euc_cn CN-GB, ei_euc_cn CSGB2312, ei_euc_cn GBK, ei_ces_gbk 

下面修改encodings.def,这个根据刚才修改的aliases.gperf来修改。自上而下,直到

DEFENCODING(( "ISO-8859-1", /* IANA */ "ISO_8859-1", /* IANA */ "ISO_8859-1:1987", /* IANA */ "ISO-IR-100", /* IANA */ "CP819", /* IANA */ "IBM819", /* IANA */ "LATIN1", /* IANA */ "L1", /* IANA */ "csISOLatin1", /* IANA */ /*"ISO8859-1", X11R6.4, glibc */ /*"ISO8859_1", JDK 1.1 */ ), iso8859_1, { iso8859_1_mbtowc, NULL }, { iso8859_1_wctomb, NULL }) 

这一部分,上面所有的是需要保留的(包括这一部分)。后面再保留:

DEFENCODING(( "GB_2312-80", /* IANA */ "ISO-IR-58", /* IANA */ "csISO58GB", /* IANA */ "CHINESE", /* IANA */ /*"GB2312.1980-0", X11R6.4 */ ), gb2312, { gb2312_mbtowc, NULL }, { gb2312_wctomb, NULL }) DEFENCODING(( "EUC-CN", /* glibc */ "EUCCN", /* glibc */ "GB2312", /* IANA */ "CN-GB", /* RFC 1922 */ "csGB2312", /* IANA */ /*"EUC_CN", JDK 1.1 */ /*"CP51936", Windows */ ), euc_cn, { euc_cn_mbtowc, NULL }, { euc_cn_wctomb, NULL }) DEFENCODING(( "GBK", /* IANA, JDK 1.1 */ ), ces_gbk, { ces_gbk_mbtowc, NULL }, { ces_gbk_wctomb, NULL }) 

这个是关于GB2312和GBK编码的。剩余的部分可以全部删除了,这与aliases.gperf对应起来了。

4.由aliases.gperf重新生成aliases.h

aliases.gperf文件的目的是为了生成aliases.h。打开aliases.h,发现前面几行有些注释:

/* ANSI-C code produced by gperf version 3.0.3 */ /* Command-line: gperf -t -L ANSI-C -H aliases_hash -N aliases_lookup -G -W aliases -7 -C -k '1,3-11,$' -i 1 aliases.gperf */ 

看到了生成aliases.h的命令行,于是在lib目录下,执行:

gperf -t -L ANSI-C -H aliases_hash -N aliases_lookup -G -W aliases -7 -C -k '1,3-11,$' -i 1 aliases.gperf > aliases.h 

我的示例:

/data1/mayue6/opt/gperf-3.1/bin/gperf -t -L ANSI-C -H aliases_hash -N aliases_lookup -G -W aliases -7 -C -k '1,3-11,$' -i 1 aliases.gperf > aliases.h 

5.配置,编译

进入libiconv-1.11的根目录,执行

./configure --prefix=/data1/mayue6/opt/lib/libiconv-1.11 CC=/data1/mayue6/opt/arm-fullhan-linux-toolchain/toolchain/arm-fullhan-linux-uclibcgnueabi/bin/arm-fullhan-linux-uclibcgnueabi-gcc --target=arm-fullhan-linux-uclibcgnueabi --host=arm-fullhan-linux-uclibcgnueabi --enable-shared=yes --enable-static=yes 

配置成功后,执行

make make install 

最后到配置目录/data1/mayue6/opt/lib/libiconv-1.11/lib下查看生成静态库libiconv.a

没有精简之前,生成的libiconv.a有1.1M,精简后只有334K

 ./configure CC=arm-hi3516cv300-linux-gcc --target=arm-hi3516cv300-linux --host=arm-hi3516cv300-linux --enable-shared=yes --enable-static=yes --prefix=/home/share/mayue/opt/lib/libiconv-1.8/iconv 

参考资料
https://blog.csdn.net/hubinbin/article/details/

其他可能有用的资源

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207441.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午1:49
下一篇 2026年3月19日 下午1:49


相关推荐

  • Java BigDecimal的使用[通俗易懂]

    Java BigDecimal的使用[通俗易懂]BigDecimal加减乘除BigDecimalbignum1=newBigDecimal(“10”);BigDecimalbignum2=newBigDecimal(“5”);BigDecimalbignum3=null;//加法bignum3=bignum1.add(bignum2);System.out.pr…

    2022年6月7日
    33
  • Oracle ASMM和AMM

    Oracle ASMM和AMMASMM(AutomaticSharedMemoryManagement,自动共享内存管理)是Oracle10g引入的概念。通过使用ASMM,就不需要手工设置相关内存组件的大小,而只为SGA设置一个总的大小,Oracle的MMAN进程(MemoryManagerProcess,内存管理进程)会随着时间推移,根据系统负载的变化和内存需要,自动调整SGA中各个组件的内存大小。ASM…

    2022年6月7日
    54
  • SetCapture和ReleaseCapture

    SetCapture和ReleaseCapture函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。  函数原型:HWNDSetCapture(HWNDhwnd);  参数:  hWnd:当前线程里要捕获鼠标的

    2022年5月3日
    50
  • Claude Code Router详细安装以及使用(包含Window and Linux)

    Claude Code Router详细安装以及使用(包含Window and Linux)

    2026年3月15日
    3
  • Tomcat闪退问题小结[通俗易懂]

    Tomcat闪退问题小结[通俗易懂]一、tomcat双击startup.bat启动报错思路:优先考虑没有正确配置JAVA_HOME等java环境变量,可在cmd中进入tomcat的bin目录,执行startup.bat脚本,若未正确配置JAVA_HOME等变量,会出现具体的提示信息。解决方法1:在计算机环境变量中进行配置;解决方法2:在startup.bat文件的顶端指定jdk与tomcat的包路径。二、tomcat部署项目后启动过程中出现错误闪退,无法查看具体的错误信息解决方式:设置tomcat遇到问题不闪退,具体设

    2022年5月30日
    41
  • 为什么数据库读写分离可以提高性能

    虽然知道处理大数据量时,数据库要做读写分离,但是为什么读写分离可以提高性能呢?下面是搜来的一些解释,看看再说!一什么是读写分离      MySQLProxy最强大的一项功能是实现“读写分离(Read/WriteSplitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数

    2022年4月7日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号