资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

linux编译头文件命令,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 = "bendl;

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平台上进行交叉编译

采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行。

linux下的交叉编译环境重要包括以下几个部分:

1.对目标系统的编译器gcc

2.对目标系统的二进制工具binutils

3.目标系统的标准c库glibc

4.目标系统的linux内核头文件

交叉编译环境的建立步骤

一、下载源代码 下载包括binutils、gcc、glibc及linux内核的源代码(需要注意的是,glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致),并设定shell变量PREFIX指定可执行程序的安装路径。

二、编译binutils 首先运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行make install。

三、配置linux内核头文件

首先执行make mrproper进行清理工作,然后执行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)进行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架构,因为缺省架构为主机的cpu架构),这一步需要根据目标机的实际情况进行详细的配置,笔者进行的实验中目标机为HP的ipaq-hp3630 PDA,因而设置system type为SA11X0,SA11X0 Implementations中选择Compaq iPAQ H3600/H3700。

配置完成之后,需要将内核头文件拷贝到安装目录: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux

四、第一次编译gcc

首先运行configure文件,使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,并使用--disable-threads、--disable-shared、--enable-languages=c参数,然后执行make install。这一步将生成一个最简的gcc。由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,因此需要首先生成一个最简的gcc,它只需要具备编译目标机glibc库的能力即可。

五、交叉编译glibc

这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。该过程要用到linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其内核头文件所在的include目录;或者,也可以在接下来要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径。

configure的运行参数设置如下(因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc): CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库。

六、第二次编译gcc

运行configure,参数设置为--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++。

运行make install。

到此为止整个交叉编译环境就完全生成了。

几点注意事项

第一点、在第一次编译gcc的时候可能会出现找不到stdio.h的错误,解决办法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS变量的设定中增加-Dinhibit_libc和-D__gthr_posix_h。

Objective c中,linux下gcc 编译头文件的命令是什么?

预处理对头文件、宏定义等进行处理,生成

.i

的默认文件,命令:gcc

-E

test.ctest.i

linux 怎么编译c的源程序的?gcc,编译命令是什么?

在Linux下面,如果要编译一个C语言源程序,我们要使用gcc编译器。

先将源文件编译成目标文件:gcc - c hello.c

生成hello.o文件,再将目标文件编译成可执行文件:gcc -o hello hello.o

如:

int main(int argc,char **argv)

{

printf("Hello Linux\n");

}

扩展资料:

在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。具体可参考GCC Manual。

GCC最基本的用法是∶gcc [options] [filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。

参考资料:

百度百科_gcc


文章标题:linux编译头文件命令,linux头文件怎么编译
URL分享:http://cdkjz.cn/article/phcjps.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220