在海思的hi3516上面使用libxml2库,解析xml文件的时候,报错如下:
test.xml:1: parser error : Unsupported encoding GB2312
<?xml version="1.0" encoding="GB2312"?>
经过查找资料,参考:https://bbs.csdn.net/topics/80162056 、
https://blog.csdn.net/wuu19/article/details/100070509
https://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/05/09/3068941.html
问题得到解决,怀疑是海思的hi3516系统上的iconv版本太低;
1、到 http://ftp.gnu.org/gnu/libiconv/ 下载合适的libiconv版本,本人首先用的最新版本1.16,但是交叉编译安装后,并未生成我想要的文件 preloadable_libiconv.so,资料也查了,但是原因还是不得知,由于时间原因试了其他版本,1.11和1.15都成功生成了preloadable_libiconv.so文件,(1.14直接编译失败,原因未做深究),
2、交叉编译安装libiconv库:
./configure --prefix=/home/3rdparty_lib/hi3516/install_libiconv-1.11 --host=arm-linux CC=arm-himix200-linux-gcc --enable-shared
3、在使用libxml2库解析xml文件的程序运行的机器上,配置环境变量,如下:
export LD_PRELOAD=/home/test/preloadable_libiconv.so
有点奇怪的是,只配置了这个环境变量就可以了!!!程序没做改动,也没连接libiconv.so库文件。
(我原先是连接了libiconv.so库文件,即:-liconv 和 -L 库文件路径,也配置了对应的LD_LIBRARY_PATH,测试是OK的,但是这些步骤都去掉,仍然是OK的,可能和LD_PRELOAD有关吧,这个第一次接触到,也没做深究,以后有时间再研究吧)