如何检查交叉编译器gcc工具链里是否有某个库(以zlib库和libpng库为例)
freetype 依赖于 libpng,libpng 又依赖于 zlib,所以我们应该:先编译
安装 zlib,再编译安装 libpng,最后编译安装 freetype。
但是,有些交叉编译器工具链里已经有 zlib库和freetype,所以我们需要确认下我们的gcc编译器工具链中有没有zlib库和libpng库,怎么看呢?
01-检查 GCC 编译器目录中是否包含 zlib 库
要检查 GCC 编译器目录中是否包含 zlib 库,可以按以下步骤操作:
假设gcc编译器的目录如下:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/
方法 1:查找 zlib 相关文件
可以在编译器目录下搜索 libz.*
文件,这是 zlib 库的文件名格式。
执行命令:
find /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot -name "libz.*"
- 结果解读:
- 如果找到类似
libz.so
、libz.a
或libz.so.x.x.x
的文件,说明存在 zlib 库。 - 如果没有找到,说明可能没有安装该库。
- 如果找到类似
运行结果如下:
book@100ask:~$ find /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot -name "libz.*"
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libz.so.1.2.11
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libz.so.1
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libz.so
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/libz.so.1.2.11
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/libz.a
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/libz.so.1
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/libz.so
显然,有zlib库的相关动态文件和静态文件,说明有zlip库。
方法 2:查看是否包含 zlib 头文件
zlib 的头文件通常是 zlib.h
。可以通过以下命令搜索:
find /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot -name "zlib.h"
- 结果解读:
- 如果找到
zlib.h
,通常表明支持 zlib。
运行结果如下:
- 如果找到
book@100ask:~$ find /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot -name "zlib.h"
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include/zlib.h
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include/qt5/QtZlib/zlib.h
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/include/zlib.h
从运行结果可知,有相应的头文件,所以zlip库存在。
方法 3:编译测试程序
尝试编译一个使用 zlib 的测试程序,以验证编译器是否支持 zlib。
测试程序:
#include <zlib.h>
#include <stdio.h>
int main() {
printf("ZLIB version: %s\n", zlibVersion());
return 0;
}
编译命令:
arm-buildroot-linux-gnueabihf-gcc -o test_zlib test_zlib.c -lz
- 结果解读:
- 如果编译成功并运行正常,说明支持 zlib。
- 如果失败,可能需要安装 zlib 库或调整库的路径。
编译成功,如下图:
说明有zlib库。
注意:这个生成的可执行文件不能在Ubuntu中运行,因为它是在ARM平台上运行的。
检查 GCC 编译器目录中是否包含 libpng 库
要检查你的 GCC 工具链中是否包含 libpng
库,可以按以下步骤进行操作:
方法 1:查找 libpng
文件
libpng
的库文件通常以 libpng
开头。你可以直接在工具链目录中搜索它的库文件。
执行命令:
find /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot -name "libpng*"
- 结果解读:
- 如果找到类似
libpng.so
、libpng.a
或libpng16.so.x.x.x
的文件,说明存在libpng
库。 - 如果没有找到,说明可能没有安装该库。
- 如果找到类似
运行结果如下:
book@100ask:~$ find /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot -name "libpng*"
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/bin/libpng-config
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/bin/libpng16-config
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/share/man/man3/libpng.3
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/share/man/man3/libpngpf.3
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libpng16.so.16.37.0
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libpng16.la
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/pkgconfig/libpng.pc
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/pkgconfig/libpng16.pc
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libpng.so
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libpng16.so.16
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libpng16.so
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libpng.la
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include/libpng16
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/libpng-config
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/libpng16-config
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/share/man/man3/libpng.3
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/share/man/man3/libpngpf.3
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/libpng16.so.16.37.0
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/libpng16.la
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/pkgconfig/libpng.pc
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/pkgconfig/libpng16.pc
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/libpng.so
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/libpng16.so.16
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/libpng16.so
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/libpng.la
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/include/libpng16
从上面的运行结果来看,存在libpng的相关动态库和静态库,所以存在libpng库。
方法 2:查找 libpng
的头文件
libpng
的头文件通常是 png.h
和 pngconf.h
,它们可以用来判断是否有 libpng
。
搜索命令:
find /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot -name "png.h"
find /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot -name "pngconf.h"
- 结果解读:
- 如果找到这些头文件,说明存在
libpng
的开发支持。
- 如果找到这些头文件,说明存在
运行命令:
find /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot -name "png.h"
的结果如下:
book@100ask:~$ find /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot -name "png.h"
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include/png.h
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include/libpng16/png.h
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/include/png.h
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/include/libpng16/png.h
可见,有libpng库的头文件,所以有libpng库。
方法 3:使用编译器测试 libpng
尝试编译一个简单的使用 libpng
的测试程序来确认。
测试程序:
#include <png.h>
#include <stdio.h>
int main() {
printf("libpng version: %s\n", png_libpng_ver);
return 0;
}
编译命令:
arm-buildroot-linux-gnueabihf-gcc -o test_png test_png.c -lpng
- 结果解读:
- 如果编译成功并运行正常,说明工具链中支持
libpng
。 - 如果失败,可能需要安装
libpng
。
- 如果编译成功并运行正常,说明工具链中支持
编译结果如下:
这充分说明这个交叉编译工具链里有libpng库。注意:这个生成的可执行文件不能在Ubuntu中运行,因为它是在ARM平台上运行的。