日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libiconv库裁剪

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.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 */"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.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

–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

對比如下圖:

其他交叉編碼命令記錄

./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/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库裁剪的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。