当前位置: 首页 > article >正文

如何检查交叉编译器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.solibz.alibz.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.solibpng.alibpng16.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.hpngconf.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平台上运行的。



http://www.kler.cn/a/453129.html

相关文章:

  • 【路径规划】原理及实现
  • linux---awk命令详细教程
  • 如何通过 360 驱动大师检查自己电脑上的显卡信息
  • 【安全编码】Web平台如何设计防止重放攻击
  • 从测试服务器手动热部署到生产环境的实现
  • 【ES6复习笔记】箭头函数(5)
  • 修炼之道 ---其四
  • 3.系统学习-熵与决策树
  • 福特汽车物流仓储系统WMS:开源了,可直接下载
  • CentOS下安装RabbitMQ
  • HNUST-数据分析技术课堂实验
  • 软件渗透测试如何做?渗透测试作用有哪些?
  • flask后端开发(4):模板访问对象属性和过滤器的使用
  • 短视频运营行业该如何选择服务器?
  • 使用FFmpeg进行拉流和推流操作
  • 运行Zr.Admin项目(后端)
  • 使用React Strict DOM改善React生态系统
  • 使用openvino加速部署paddleocr文本方向分类模型(C++版)
  • 质数分解,用sqrt缩小范围
  • Ps:在 Photoshop 中编辑视频
  • 微信小程序中遇到过的问题
  • 【Laravel】接口的访问频率限制器
  • ViiTor实时翻译 2.2.1 | 完全免费的高识别率同声传译软件
  • 51c自动驾驶~合集43
  • mac_录屏
  • 【Java基础面试题026】Java中的String、StringBuffer和StringBuilder的区别是什么?