root@ubuntu:/home/linuxsystemcode/04th_print_info# arm-none-linux-gnueabi-gcc -finput-charset=GBK -o example1 example1.c -lfreetype -lm
/usr/local/arm/arm-2009q3/bin/../arm-none-linux-gnueabi/libc/lib/libfreetype.so: file not recognized: File format not recognized
collect2: ld returned 1 exit status
如上图,交叉编译的时候出现无法识别libfreetype.so文件的错误信息,到我们的交叉编译工具链的C库目录下使用以下命令查看该文件的格式
root@ubuntu:/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib# file libfreetype.so
libfreetype.so: symbolic link to `libfreetype.so.6.9.0'
通过返回的提示信息我们知道它指向libfreetype.so.6.9.0,于是我们再通过file命令查看libfreetype.so.6.9.0,发现是x86-64的,而我要编译的是arm版本的,所以这里报错了。问题的根源找到了,那怎么解决呢?
解决办法:在安装freetype的时候配置为ARM-Linux版本的即可,命令如下
tar xjf freetype-2.4.10.tar.bz2 解压
./configure --host=arm-none-linux-gnueabi 配置为ARM-Linux
make
make DESTDIR=$PWD/tmp install安装到一个临时目录,再把里面的头文件拷贝到我们的交叉编译工具链里面去
root@ubuntu:/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib# file libfreetype.so.6.9.0
libfreetype.so.6.9.0: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped 现在变成ARM版本的了
把tmp/usr/local/lib/* 复制到 /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib
把tmp/usr/local/include/* 复制到 /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/usr/include
参考文章:https://blog.csdn.net/u011113596/article/details/80325081