linux编译器头文件配置
㈠ linux下编写c++,include的那些头文件在什么地方
C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。
1、#include <stdio.h>,直接到系统指定目录去查找头文件。
系统默认路径为:/usr/include,/usr/local/include,/usr/lib/gcc-lib/i386-Linux/2.95.2/include(gcc库文件的路径,各个系统不一致)
2、#include "stidio.h",会先到当前目录查找头文件,如果没找到在到系统指定目录查找。
3、gcc编译时查找头文件,按照以下路径顺序查找:
gcc编译时,可以设置-I选项以指定头文件的搜索路径,如果指定多个路径,则按照顺序依次查找。比如,gcc -I /usr/local/include/node a.c
gcc会查找环境变量C_INCLUDE_PATH,CPLUS_INCLUDE_PATH中指定的路径。
(1)linux编译器头文件配置扩展阅读:
应用程序代码编译过程:
编译器根据头文件提供的库函数接口形式,来编译代码,然后生成目标文件;然后,再使用链接器将这个目标文件与系统库链接;最终生成应用程序。代码包含了自己写的内容,还有系统提供好的现成的库函数,整个结合起来才形成一个完整的程序。
库函数的头文件,在编译的时候被使用,而库函数的代码段(库文件),在链接的时候被使用。
example:
应用程序代码在使用一个系统调用的时候,例如printf()函数,需要指定包含的头文件stdio.h;另外,在链接的时候对应的链接libc.a(笔者电脑文件所在目录:/usr/lib/i386-linux-gnu/libc.a)。
总结一下,编写应用程序,需要使用linux系统提供的库函数。具体实现起来,需要头文件和库文件。头文件是需要我们编写应用程序的时候,在源文件开头添加的;而库文件则需要配置编译环境进行指定搜索目录。
㈡ 关于嵌入式Linux应用程序的头文件
一般都在/usr/include,你可以用whereis或者find搜索嘛,运行的时候应该是在开发板的根文件系统上找寻这些已经预编译好的库文件,如果开发板上没有该库文件,你需要交叉编译这些库文件再烧写到开发板上吧,由于cpu架构不同,台式机的库文件(已经预编译好的.o文件)和开发板用的库文件(*.o)并不通用,你需要自己解决库文件问题。
㈢ linux下 头文件,该怎么处理
在Linux下面,如果要编译一个C语言头文件,,要使用GNU的gcc编译器,以一个实例来说明如何使用gcc编译器:
假设有下面一个非常简单的源程序(hello.c):
1
2
3
4
int main(int argc,char **argv)
{
printf("Hello Linux\n");
}
要编译这个程序,只要在命令行下执行:
1
gcc -o hello hello.c
gcc 编译器就会生成一个hello的可执行文件;执行./hello,就可以看到程序编译后的输出结果“Hello Linux”。
㈣ 关于在linux下用gcc编译头文件的问题。
我用一个例子来告诉你怎么样在 C++ 里使用C的头文件/函数。
比方说我有一个C的头文件叫 c.h, C的源码文件叫 c.c,内容分别是
c.h:
#ifndef _ASDFD_INCLUDED_
#define _ASDFD_INCLUDED_
#include <stdio.h>
extern int test(int a);
#endif
c.c:
#include "c.h"
int test(int a)
{
printf("A = %d\n", a);
return a*a;
}
现在我想在c++中使用c.c中提供的函数test(),我的c++文件名字叫 a.cpp,那么里面跟C有关的部分就要用 extern "C" {} 大括号括起来,看看我的
a.cpp:
#include <iostream>
using namespace std;
extern "C"
{
#include "c.h"
}
int main()
{
int b = 12;
b = test(b);
cout<<"b = "<<b<<endl;
return 0;
}
看到了吧,#include "c.h" 被 extern "C" {}括起来了。
然后是如何编译,先把C文件编出目标文件(.o)来
gcc -c c.c
你会看到生成了 c.o,其实,有目标文件就够了,如果你一定要做成(静态/动态)库文件,也是可以的,不过我这里就不深入了,做成库和直接用目标文件对解决你的问题没有任何区别。
然后再编译C++文件,也就是我的 a.cpp
g++ -o hello a.cpp c.o
看到了吧,我在编译 a.cpp 的时候把C生成的 c.o也加上了。 然后生成 可执行的 hello, 运行
./hello
就可以看到
A = 12
b = 144
关于创建静态库,假定你有3个C文件, a.c, b.c, c.c 提供了你C++要用到的接口,那么可以把这三个C文件编译出来的目标文件放到一个库文件里供C++使用,方法为
先编译出目标文件
gcc -c a.c b.c c.c
这时候你应该看到有 a.o b.o c.o了
然后创建库文件
ar cr libtest.a a.o b.o c.o
这三个目标文件就放入 libtest.a 这个静态库中了,然后编译C++程序 (你的C++程序应该已经按照我前面说的用 extern "C" 把C的接口都括起来了),假定你的 libtest.a 放在 /home/aaa/lib下
g++ -o my.exe my.cpp -L/home/aaa/lib -ltest
就会生成可执行文件 my.exe了。
㈤ 深度linux的arm-linux-gnueabihf-gcc编译参数如何配
一般来说,交叉编译工具是用于在一种架构的主机(例如x86)上,编译另一种主机(例如arm)运行的程序,在这个编译期间,需要用到的头文件/库,往往需要从一个叫目标文件系统(sysroot)的路径开始查找。
sysroot里包含usr,lib,usr/lib usr/include等文件夹结构和必要的头文件和库,你理解为目标机器上的整个文件系统,搬到你这台电脑上,然后作为一个文件夹存在。
交叉编译原则上不能用主机(host)的头文件,
这首先是因为编译器在查找头文件的相对路径时,交叉编译器会配置为查找目标平台架构的位置,和主机的gcc不一样,这也是为什么它去arm-linux-gnueabihf这个目录去寻找的原因。
其次主机和目标机的系统版本有差异,再加上处理器架构的差异,往往有很多兼容性问题,甚至有难以解决的编译错误。
如果一定要用本机的头文件系统来凑合,那么需要把所有的-I都列出来,即不仅需要-I/usr/include,还需要-I/usr/include/xxx,甚至要创建一些文件夹的符号链接指向你主机的这些头文件文件夹。即使这些,往往也未必成功,有些头文件不同的系统架构,会不完全一样甚至缺失。
交叉编译一般无法使用主机的库(so)文件
主机和目标机往往架构不同,库完全不能使用
可能遇到主机和目标机架构相同的情况,比如你在intel64上编译一套运行在intel64位手机的程序,但是库兼容性的问题仍然存在。
最后结论:你这个问题,如果你是为了另一套机器(比如arm开发板编译),那么需要搞一套目标机的文件系统才能顺利编译。
对了,目标文件系统需要编译了python和dev头文件/库,好多嵌入式设备裁剪的很厉害,都不用python。
㈥ Linux下环境搭建 怎么配置编译器
编译器:GCC编译器可以用来编译C和C++源程序,C编译器通过文件的后缀来判断是C程序还是C++程序。一般来说C源文件的后缀为“.C”,而C++源文件的后缀为“.C”或“C++”。
但GCC编译器只能编译C++源程序,不能与使用的库连接,因此用G++来完成C++程序的编译与连接,该程序会自动调用GCC来编译。
Linux里环境变量的设置,有如下几种方法:
(1)直接在终端里输入export后面加要设的变量,例如QT:
ExportQTDIR=$PWD/qt-2.3.2
其中,pwd是用来显当前路径的命令,在其前面加上$,则表示QT的目标目录在当前目录下的“qt-2.3.2”里,当然“$PWD”也可以用绝对路径来代替。这种方法所设的环境变量在下次开机后不再有效,而且换个shell也不会有效,只是临时的。
(2)在etc/profile里添加环境变量,比如:
exportQTDIR=/usr
exportLD_LIBRARY_PATH=$QTDIR/lib
exportQT_QWS_FONTDIR=$QTDIR/lib/fonts
exportQWS_DISPLAY="LinuxFb:/dev/fb0"
(3)修改.bashrc,如果需要给某个用户权限使用这些环境变量,只需修改其个人用户家目录下的.bashrc文件就可以了。
(4)用以上面两种方法设置好环境变量后记得重启
以上使用QT为例
㈦ linux设备驱动程序该添加哪些头文件
#include
<linux/spinlock_types.h>
#include
<linux/blkdev.h>
#include
<linux/mole.h>
#include
<linux/kernel.h>
#include
<linux/fs.h>
#include
<linux/genhd.h>
#include
<linux/init.h>
以上这些基本上都得用到的头文件
一般编译器会报错,根据报错信息,再添加相应的头文件即可。
㈧ 关于在linux下用gcc编译头文件
首先,确定你的头文件都用宏隔开了,防止了重复定义。例如,在file.h 中的开头就是
#ifndef __FILE__HEAD___
#define __FILE__HEAD___
//头文件中的内容
#endif //__FILE__HEAD___
之后,
file.h中用到了list.h ,所以file.h中#include "list.h"//假设头文件都在同一目录下
list.h中用到了preapre.h 所以list.h中#include "prepare.h"
prepare.h中用到了node.h 所以prepare.h中#include "node.h"
在某些情况下,由于代码组织等的问题,还是会出现编译问题,这个就是代码组织技巧的问题了,要根据具体代码具体判断了。
另外,准确的说头文件只是在编译的第一步,预处理的时候使用了,真正被“编”的应该是源文件,这个是编译原理方面的问题了。