关于在linux下用gcc编译头文件的问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于在linux下用gcc编译头文件的问题。相关的知识,希望对你有一定的参考价值。
有node.h prepare.h list.h file.h 这四个头文件, prepare.h中用到了node.h, list.h中用到了preapre.h , file.h中用到了list.h ,怎么用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了。 参考技术A
在Linux下面,如果要编译一个C语言头文件,,要使用GNU的gcc编译器,以一个实例来说明如何使用gcc编译器:
假设有下面一个非常简单的源程序(hello.c):
int main(int argc,char **argv)printf("Hello Linux\\n");
要编译这个程序,只要在命令行下执行:
gcc -o hello hello.cgcc 编译器就会生成一个hello的可执行文件;执行./hello,就可以看到程序编译后的输出结果“Hello Linux”。
参考技术B c代码里包含头文件,编译用gcc编译c文件,多个c文件自己写个makefile,-I可以指定头文件目录比如gcc -I/my/include/file xxxxxxxxxxx ,把头文件放一个目录就行了
在Linux下用gcc编译hello world
1. 确保Linux系统里已经装好了gcc
测试:输入gcc后是如下的结果就说明已经安装成功
2. 创建HelloWorld.c
使用 touch 创建一个空文件;
用vim编辑
按下A或者I 插入
并输入代码
输入完成之后,按ESC退出
并输入:wq(小写)
w:write
q:quit
用GCC编译
gcc -Wall HelloWorld.c
-Wall 编译后显示所有警告
./a.out
.out文件就是扩展名为out的文件,它本身不代表任何信息。在Linux中判断文件是否是可执行文件,首先要看文件的属性是否是可执行的,它没有一个默认的扩展名表示此文件为可执行文件。为了方便,Linux中可执行文件一般都是没有扩展名的。
在使用gcc编程时,没有指定输入可执行文件名,默认生成可执行文件a.out文件。执行时必须键入命令 ./a.out,即要带上扩展名,如果键入./a 则不正确,因为它寻找a这个文件,而不是a.out这个文件。
所以如果要自己制定可执行文件的名字可以采用如下的方式:
-o 是输出参数,输出名字的参数,如果不加-o 参数。命令:gcc helloworld.c 则会生成a.out的可执行文件。
而执行这个可执行文件可以采用如下的方式:
实时上,上述过程有四个步骤, prepressing, compilation,assembly,linking
以上是关于关于在linux下用gcc编译头文件的问题。的主要内容,如果未能解决你的问题,请参考以下文章
arm-linux-gcc工具链:汇编文件如何include c的头文件呢???