libiconv库裁剪
閱讀目錄
- libiconv簡介
- libiconv裁剪
- 1.libiconv下載
- 2.libiconv解壓
- 3.修改源文件
- 4.由aliases.gperf重新生成aliases.h
- 5.配置,編譯
- 其他可能有用的資源
libiconv簡介
國際文本大多以Unicode編碼 。但是,由于歷史原因,它有時仍使用語言或國家/地區相關的字符編碼進行編碼。隨著互聯網的出現以及各國之間頻繁的文本交換 - 即使從外國查看網頁也是這種情況下的“文本交換” - 這些編碼之間的轉換已成為必需。
特別是,具有Windows操作系統的計算機仍然使用傳統(有限)字符編碼在區域設置中運行。某些程序(如郵件程序和Web瀏覽器)必須能夠在給定的文本編碼和用戶的編碼之間進行轉換。其他程序在內部以Unicode格式存儲字符串,以便于內部處理,并且在進行I / O時需要在內部字符串表示(Unicode)和外部字符串表示(傳統編碼)之間進行轉換。GNU libiconv是兩種應用程序的轉換庫。
libiconv裁剪
1.libiconv下載
libiconv源碼下載地址:
http://ftp.gnu.org/pub/gnu/libiconv/
https://mirror.bjtu.edu.cn/gnu/libiconv/
我下載的版本是:libiconv-1.11.tar.gz
2.libiconv解壓
以libiconv-1.11.tar.gz壓縮包為例,解壓:
tar -zxvf libiconv-1.11.tar.gz進入libiconv-1.11目錄:
cd libiconv-1.113.修改源文件
需要修改的文件只有兩個,都在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 */"csISO58GB231280", /* 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便可以了。
注意:若系統未安裝gperf,有root權限直接安裝gperf即可,沒有root權限,可將gperf安裝到本地,添加安裝路徑到本用戶環境變量再執行即可
我的示例:
/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.h5.配置,編譯
進入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–prefix= 配置安裝路徑
CC= 配置編譯工具鏈(使用絕對路徑)
–target=
–host=
–enable-shared=yes 為了生成動態庫
–enable-static=yes 為了生成靜態庫libiconv.a
配置成功后,執行
make make install最后到配置目錄/data1/mayue6/opt/lib/libiconv-1.11/lib下查看生成靜態庫libiconv.a
沒有精簡之前,生成的libiconv.a有1.1M,精簡后只有334K
對比如下圖:
其他交叉編碼命令記錄
參考資料
https://blog.csdn.net/hubinbin595959/article/details/84437985
其他可能有用的資源
https://blog.csdn.net/xp5xp6/article/details/51611592
https://blog.csdn.net/qq_22790049/article/details/52806954
https://blog.csdn.net/houxn22/article/details/39396983
https://blog.csdn.net/yuan1125/article/details/51068332
總結
以上是生活随笔為你收集整理的libiconv库裁剪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: data数值设置 vue_怎么改变vue
- 下一篇: python寻找字符串中的英文字符,py