我在使用iconv函数时出现一些问题,就是在pc上测试是好用的,但是编译到arm板子上转换出来的字符就是空。
在网上查找结果应该是交叉编译链中的libc库有些问题,所以就想到解决的方法
第一种方法更新libc库
比较麻烦,因为我们用的是编译好的交叉编译器,这中方法需要重新编译生成交叉编译器,并且也需要使用新编译生成的交叉编译工具重新编译应用程序,因此本方法代价太大,
采用第二种方法。
第二种方法为只更新libiconv库
到iconv官网下载最新的库源码包,下载地址为:
http://ftp.gnu.org/gnu/libiconv
我下载的版本是1.15
解压
./configure --prefix=/home/linux/arm/iconv/ --host=arm-linux
make
make install
--prefix=/home/linux/arm/iconv/定义安装位置
--host=arm-linux定义编译环境
上述命令执行完成后会在libiconv目录下生成新的iconv目录,该目录下存在4个目录分别是:
bin include lib share
在lib目录下为生成的库文件,其中一个为preloadable_libiconv.so,把它下载到开发板
的lib目录下,然后再设置开发板的系统环境变量:
export LD_PRELOAD=/lib/preloadable_libiconv.so
然后再执行应用程序即可,正常运行。
LD_PRELOAD,是个环境变量,用于动态库的加载,动态库加载的优先级最高,一般情况下,其加载顺序为LD_PRELOAD>LD_LIBRARY_PATH>/etc/ld.so.cache>/lib>/usr/lib。