文档章节

交叉编译 XXX含义与作用

拉风的道长
 拉风的道长
发布于 2018/09/02 13:43
字数 1084
阅读 44
收藏 0

SYSROOT = dir路径

dir作为逻辑根目录(搜索头文件和库文件)。编译器通常会在 /usr/include 和 /usr/lib 中搜索头文件和库,使用这个选项后将在 dir/usr/include 和 dir/usr/lib 目录中搜索。


例:

export SYSROOT=/xx/android-ndk-r14b/platforms/android-21/arch-arm/

NDK的arch-arm目录下有*/usr/lib* 和 /usr/include 这两个文件夹,所以可以以上这样设置。

CC=文件路径1 CXX=文件路径2

CC=文件路径1:

Program for compiling C programs; default ‘cc’. 用于编译C程序的编译器。默认为'cc'.


例:

export CC=/xx/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc

此处设置为arm-linux-androideabi-gcc作为C语言的编译器。

CXX=文件路径2

Program for compiling C++ programs; default ‘g++’. 用于编译C++程序的编译器。默认为'g++'.


例:

export CXX=/xx/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++

此处设置为arm-linux-androideabi-g++作为C语言的编译器。

TIPS

NDK有个ndk-witch命令(USAGE: ndk-which <tool> where tool is 'gdb', 'gcc', 'objdump', etc.)可以列出当前NDK使用的tool位置。 例如:列出gcc位置:

android-ndk-r14b$ ndk-which gcc

输出:

/xxx/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc

###CFLAGS=参数选项 CXXFLAGS=参数选项 CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项。这两个变量实际上涵盖了编译和汇编两个步骤。两者的参数选项如下:

CFLAGS等含义

其中: -I dir 指定了编译所需的头文件.h所在的目录, -L dir 指定了编译所依赖的库(静态库,动态库)所在的目录, -llibrary 制定了依赖的库的名字(静态库,动态库)(例如:–lsunq:定义的是libsunq.so.由于在Linux下的库文件命名时有一个规定:必须以lib三个字母开头。因此在用-l选项指定链接的库文件名时可以省去lib三个字母。也就是说在对”-lsunq”进行处理时,会自动去链接名为libsunq.so的文件。).

需要注意的是,“-I dir”和“-L dir”都只是指定了路径,而没有指定文件,因此不能在路径中包含文件名。


例:

[root@localhost Gcc] Gcc hello1.c –I /root/workplace/Gcc/ -o hello1

这里依赖了-I定义的/root/workplace/Gcc/目录下的头文件。

[root@localhost Gcc] Gcc hello_sq.c –L /root/workplace/Gcc/lib –lsunq –o hello_sq

这里依赖了-L定义的/root/workplace/Gcc/lib目录下的libsunq.so的库。

CPP=文件路径 CPPFLAGS=参数选项

CPP=文件路径

Program for running the C preprocessor, with results to standard output; default $(CC) -E . 运行C预处理器的程序,结果为标准输出; 默认 $(CC)-E。


例:

export CPP=/xx/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-cpp

此处设置为arm-linux-androideabi-cpp作为C语言的预处理器。

CPPFLAGS=参数选项

Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers).提供给C预处理器和使用它的程序的额外标志(C和Fortran编译器)。

从[链接2]处摘抄:

Compiling C programs
n.o is made automatically from n.c with a recipe of the form ‘$(CC) $(CPPFLAGS) $(CFLAGS) -c’.

Compiling C++ programs
n.o is made automatically from n.cc, n.cpp, or n.C with a recipe of the form ‘$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c’. We encourage you to use the suffix ‘.cc’ for C++ source files instead of ‘.C’.

可以看到:编译C和C++的时候都会使用到CPPFLAGS,儿CFLAGS和CXXFLAGS则是分别对C和C++编译时才用到。是否可以这么认为:C,C++都用到的FLAGS就可以用CPPFLAGS?

LIBS=参数 LDFLAGS=参数

LIBS:告诉链接器要链接哪些库文件, LDFLAGS:gcc 等编译器会用到的一些链接参数,也可以在里面指定库文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安装一个包都几乎一定的会在安装目录里建立一个lib目录。如果明明安装了某个包,而安装另一个包时,它却是说找不到,可以将那个包的lib路径加入的LDFALGS中试一下。


例:

LIBS = -lpthread -liconv -llibz -llog

跟CFLAGS,CXXFLAGS中的-L -l的功能类似。

##参考链接

[链接1]:https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

[链接2]:https://www.gnu.org/software/make/manual/make.html#Implicit-Rules

© 著作权归作者所有

共有 人打赏支持
拉风的道长
粉丝 54
博文 110
码字总数 55629
作品 0
昌平
程序员
私信 提问
编写驱动的makefile使要

一般在编译linux驱动时,我们需要在交叉编译环境中进行编译,所以要在编译环境中搭建交叉编译环境。编写驱动的makefile使需要制定驱动依赖的内核的路径,makefile写法如下: KERN_DIR = /xx...

天王盖地虎626
2018/12/11
0
0
Linux操作系统的头文件和库文件搜索路径

一、 头文件 1 “”中的头文件,在源文件当前目录查找 2 -I 中指定目录 -I可以在CFLAG中指定 3 gcc的环境变量 CINCLUDEPATH, CPLUSINCLUDEPATH, OBJCINCLUDEPATH 4 编译器预设路径、内定目录...

双月通天
2016/02/01
79
0
Linux交叉编译求教

各位大虾,想请教一个关于交叉编译的问题,望能解答!! 是这样的,我想在PC机上交叉编译一个已经移植好了的gcc编译器(有源码),假定为xxx-gcc(xxx为此这个DSP芯片的名字),我PC机的系统...

ShawQ
2012/03/17
1K
6
uboot移植之主Makefile分析

1:#uboot 的版本号 VERSION = 1 #主版本号 PATCHLEVEL = 3 #次版本号 SUBLEVEL = 4 #再次版本号 EXTRAVERSION = #关于uboo的一些另外的描述 #变量UBOOTVERSION用来保存uboot的版本信息 UBOO...

菜鸟养成记
2017/04/27
0
0
如何通过xmake进行交叉编译

xmake 提供了方便灵活的交叉编译支持,大部分情况下,都不需要配置很复杂的toolchains前缀,例如: 什么的 只要这个toolchains目录满足如下结构(大部分的交叉工具链都是这个结构): 那么,...

ruki
2016/07/22
11
0

没有更多内容

加载失败,请刷新页面

加载更多

Java12的新特性

Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性 序 本文主要讲述一下Java12的新特...

go4it
11分钟前
1
0
深入解密比Guava Cache更优秀的缓存-Caffeine

1.前言 读这篇文章之前希望你能好好的阅读: 你应该知道的缓存进化史 和 如何优雅的设计和使用缓存? 。这两篇文章主要从一些实战上面去介绍如何去使用缓存。在这两篇文章中我都比较推荐Caffe...

咖啡拿铁的技术分享
13分钟前
1
0
Java B2B2C多用户商城 springcloud架构 --Eureka服务器搭建及配置

第一步,创建一个普通的springboot项目 以下方法都可以快速创建一个boot项目: 1. 浏览器访问http://start.spring.io/,填写信息,下载zip包,加压到你的ide的工作空间直接使用。 2. 使用ide...

明理萝
24分钟前
0
1
为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作

· Oracle 撒手,宣布对个人用户 (Personal Users) , Java 8 官方支持时间持续到 2020 年 12 月;对商业用户(Commercial Users),2019 年 1 月之后不再提供免费更新。 · 红帽喊话,计划在...

Java填坑路
27分钟前
0
0
在 Ali Kubernetes 系统中,我们这样实践混沌工程

在传统的软件测试中,我们通常通过一个给定的条件来判断系统的反馈,通过断言来判断是否符合预期,测试条件和结果通常比较明确和固定。而混沌工程,是通过注入一些“不确定”因素,象放进了一...

阿里云官方博客
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部