6.4 交叉编译程序:以freetype为例

使用buildroot来给ARM板编译程序、编译库会很简单,

以后系统讲解buildroot时再使用buildroot。

现在我们还是手工交叉编译freetype,这种方法在编译、安装一些小程序时很有用。

6.4.1 程序运行的一些基础知识

  1. 编译程序时去哪找头文件?
    系统目录:就是交叉编译工具链里的某个include目录;
    也可以自己指定:编译时用 “ -I dir ”选项指定。
  2. 链接时去哪找库文件?
    系统目录:就是交叉编译工具链里的某个lib目录;
    也可以自己指定:链接时用 “ -L dir ”选项指定。
  3. 运行时去哪找库文件?
    系统目录:就是板子上的/lib、/usr/lib目录;
    也可以自己指定:运行程序用环境变量LD_LIBRARY_PATH指定。
  4. 运行时不需要头文件,所以头文件不用放到板子上

6.4.2 常见错误的解决方法

1.头文件问题
编译时找不到头文件。在程序中这样包含头文件:#include <xxx.h>
对于尖括号里的头文件,去哪里找它?
系统目录:就是交叉编译工具链里的某个include目录;
也可以自己指定:编译时用 “ -I dir ”选项指定。

怎么确定“系统目录”?
执行下面命令确定目录:

echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v -

它会列出头文件目录、库目录(LIBRARY_PATH)。

你需要在头文件目录中确定有没有这个文件,或是自己指定头文件目录。

2.库文件问题
链接程序时如果有这样的提示:undefined reference to `xxx’,它表示xxx函数未定义。
那么解决方法有2:
① 去写出这个函数
② 或是使用库函数,那需要在链接时指定库

怎么指定库?想链接libabc.so,那链接时加上:-labc。
库在哪里?
① 系统目录:就是交叉编译工具链里的某个lib目录
② 也可以自己指定:链接时用 “ -L dir ”选项指定

怎么确定“系统目录”?执行下面命令确定目录:
echo ‘main(){}’| arm-buildroot-linux-gnueabihf-gcc -E -v –
它会列出头文件目录、库目录(LIBRARY_PATH),你编译出库文件时,可以把它放入系统库目录。

3.运行问题
运行程序时找不到库:

error while loading shared libraries: libxxx.so:
cannot open shared object file: No such file or directory

找不到库,库在哪?
① 系统目录:就是板子上的/lib、/usr/lib目录
② 也可以自己指定:
运行程序用环境变量LD_LIBRARY_PATH指定,执行以下的命令:

export  LD_LIBRARY_PATH=/xxx_dir  ;  ./test
或
LD_LIBRARY_PATH=/xxx_dir   ./test

6.4.3 交叉编译程序的万能命令
如果交叉编辑工具链的前缀是arm-buildroot-linux-gnueabihf-,比如arm-buildroot-linux-gnueabihf-gcc,交叉编译开源软件时,如果它里面有configure,万能命令如下:

./configure  --host=arm-buildroot-linux-gnueabihf   --prefix=$PWD/tmp
make
make install

就可以在当前目录的tmp目录下看见bin, lib, include等目录,里面存有可执行程序、库、头文件。

1.把头文件、库文件放到工具链目录里
如果你编译的是一个库,请把得到的头文件、库文件放入工具链的include、lib目录里。别的程序要使用这些头文件、库时,会很方便。
工具链里可能有多个include、lib目录,放到哪里去?
执行下面命令来确定目录:

echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v –

它会列出头文件目录、库目录(LIBRARY_PATH)。

2. 把库文件放到板子上的/lib或/usr/lib目录里
程序在板子上运行时,需要用到板子上/lib或/usr/lib下的库文件;程序运行时不需要头文件。

6.4.4 交叉编译freetype
使用GIT下载所有源码后,本节源码位于如下目录:
01_all_series_quickstart
04_嵌入式Linux应用开发基础知识source10_freetype
freetype-2.10.2.tar.xz
libpng-1.6.37.tar.xz

本节文档以STM32MP157开发板,对于其他开发板:工具链可能不一样,请灵活变通。

1.确定头文件、库文件在工具链中的目录
以STM32MP157开发板为例,它的工具链是arm-buildroot-linux-gnueabihf-gcc,可以执行以下命令:

echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v -

可以确定头文件的系统目录为:

/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include

库文件的系统目录为:

/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib
```c2. 交叉编译、安装libpng
freetype依赖于libpng,所以需要先编译、安装libpng。命令如下:
```c
book@PC$ tar  xJf  libpng-1.6.37.tar.xz
book@PC$ cd  libpng-1.6.37
book@PC$ ./configure  --host=arm-buildroot-linux-gnueabihf   --prefix=$PWD/tmp
book@PC$ make
book@PC$ make install
book@PC$ cd  tmp
book@PC$ cp  include/*  -rf  /home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include
book@PC$ cp  lib/*  -rfd   /home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib

2.交叉编译、安装freetype

添加VX13923404017 进入技术交流群

android r 编译找不到头文件_嵌入式开发之交叉编译程序万能命令_以freetype为例...相关推荐

  1. add-apt-repository:找不到命令_嵌入式开发之交叉编译程序万能命令_以freetype为例...

    6.4 交叉编译程序:以freetype为例 使用buildroot来给ARM板编译程序.编译库会很简单, 以后系统讲解buildroot时再使用buildroot. 现在我们还是手工交叉编译free ...

  2. android r 编译找不到头文件_kOS(1):编译

    kOS不是一个全新操作系统,它基于Android.编译kOS app须要android NDK,版本至少是16b,至于android SDK则不须要了. 一.app层 1.1 预定义宏:_KOS An ...

  3. android r 编译找不到头文件_「投稿」iOS逆向——砸壳与反编译

    作者:疯狂的蛋神 近来对iOS逆向十分感兴趣,就在业余时间里自己在上网找了各种资料学习,发现许多资料对于一些细节描述的不够详细,所以也踩了很多坑,我也将自己踩的一些坑总结出来,希望对大家有所帮助. 注 ...

  4. Linux 编译找不到头文件

    Linux下使用gcc编译找不到头文件,但是查看 系统头文件件存放目录 /usr/local/include 发现头文件确实存在, 这是为什么呢? 这是因为Linux下的默认头文件路径  不包含 /u ...

  5. linux gcc 编译找不到头文件,找不到库

    找不到头文件 解决方式 (头文件均为编译时刻使用) 1.把头文件路径写成绝对路径,把路径写全,如 (相对路径也行) #include "/usr/include/stdio.h" ...

  6. 当Android工程中提示你找不到头文件,但你已经设置头文件路径了

    虽然在Android.mk文件中,配置了LOCAL_C_INCLUDES路径,但是工程中的红色叉号一直提示找不到头文件 这时,你在工程树目录中展开Includes项,捣鼓捣鼓,重新build下,或许就 ...

  7. 10.29 工作笔记 ndk编译C++,提示找不到头文件(ndk-build error: string: No such file or directory)...

    ndk编译C++.提示找不到头文件(ndk-build error: string: No such file or directory) 被这个问题弄得愁眉苦脸啊.心想为啥一个string都找不到呢 ...

  8. IAR 编译时找不到头文件的解决方法

    IAR 编译时找不到头文件的解决方法 参考文章: (1)IAR 编译时找不到头文件的解决方法 (2)https://www.cnblogs.com/kunx/p/9248106.html 备忘一下.

  9. xcode引入sdk_解决Xcode引入第三方SDK找不到头文件

    一,引入第三方sdk时找不到头文件问题: 我在mac mini,Xcode6.x的环境下引入了第三方SDK,同Xcode自带的framework同放在工程的Frameworks路径下,想在代码中使用第 ...

最新文章

  1. 入职五年回顾(八) 2013年3月
  2. conda install和pip install的区别
  3. SAP QM 样品废弃后如何删除physical samples记录?
  4. 2017《面向对象程序设计》作业四
  5. java怎么连高斯数据库_Gauss DB 数据库使用(二) Data Studio
  6. 哨兵系列卫星介绍与下载教程
  7. 电商项目java经验_分布式电商系统项目总结
  8. 三菱FX系列PLC教程
  9. 微信开发者工具协同使用
  10. 正则表达式与文本处理器
  11. 时钟芯片DS1302的原理及使用
  12. 原生 android 平板,前沿体验 原生Android 4.0系统平板推荐
  13. Ubuntu系统打不开windows磁盘文件
  14. 傅里叶变换分析之掐死教程
  15. 软路由自建iptv服务器,LEDE软路由 iPTV 实现任意端口看电视的方法
  16. 区块链最好的编程语言是什么?
  17. 【Linux进程概念】冯 诺依曼体系结构 操作系统 进程 fork 进程状态 优先级
  18. 抖音快手如何快速涨粉技巧整理
  19. 【原创】AE菜单中英文对照完全版(贴图打包下载)
  20. Win 2003 IE 增强的安全配置应该如何关闭

热门文章

  1. 三星android11推送,三星将在2020年1月开始推送Android 10系统:等太久
  2. linux中xy是什么命令,Linux命令中chmod 777 以及drwxr-xr-x分别代表什么意思
  3. 使用Guava retryer优雅的实现接口重试机制
  4. 博客园去除文章页底部的推广链接
  5. 【原】 图片预览 Image preview
  6. 系统下装软件_DCS系统的日常保养工作怎么做
  7. linux usb hcd nak,第16章通用串行总线接口(USB)mpc83xx中文手册.doc
  8. struct类型重定义 不同的基类型_C++学习大纲:联合类型
  9. oracle union all 特别慢_值得收藏的Oracle数据库性能优化
  10. Python检查字符串重叠部分并进行拼接