linux.编译命令-o Linux编译

linux下怎样编译程序

进入终端,用cd 命令切换到c文件的目录

临西ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

编译命令:gcc -o exec_file (可执行文件名) soucre_file.c(源文件)

然后 用命令 ./exec_file 运行

更高级的是用make 工具,自动编译

Linux .so库的使用

新建一个sort.c文件,写一个最简单的排序

使用 gcc -o libsort.so -fPIC -shared sort.c 产生libsort.so库。

.so库有两种调用方法:

新建main.c文件:

使用命令 gcc -o main main.c -lsort -L. 编译。

新建main2.c文件:

使用命令 gcc -o main2 main2.c -ldl 编译。动态加载.so库的话需要-ldl。

运行./main2后输出递增序列,调用成功。

linux Makefile问题.S.s: $(CPP) $(CFLAGS) $< -o $*.s什么意思

请慢慢看,真要详细讲起来,文字实在太多了,但是由于时间原因,我只能以粗略的文字讲,语言有一些逻辑漏洞,请见谅。

首先我会以粗略的文字回答你的其中一个问题,然后后面会给出第二个问题的答案。

问:什么时候会执行这些规则及其相对应的命令?

答:当你给make命令指定了它要生成的终极目标时,它会从要生成的终极目标寻址依赖的依赖条件,然后依赖条件一级一级的查找并执行相对应的命令。即如果当有目标需要.s、.o这些依赖条件的时候,会取找要生成.s、.o目标的依赖条件,这个时候就会执行这些规则:

.S.s:

$(CPP) $(CFLAGS) $ -o $*.s

.S.o:

$(CC) $(CFLAGS) -c $ -o $*.o

.c.o:

$(CC) $(CFLAGS) -c $ -o $*.o

一、

源代码文件必须经过:预处理(cpp)、编译(ccl)、汇编(as)、链接(ld)。这四个阶段最终才得到可执行的程序:

makefile里定义了变量CPP=cpp;其中$(CPP)的意思是去定义变量CPP里的值:cpp,用cpp来预处理源文件。

$(CFLAGS)的意思是取定义变量CDLAGS里面的值,一般是一些自我定义的预处理命令和编译命令的参数。

$的意思是:在规则的命令中,表示第一个依赖条件

-o是一个预处理、编译等执行命令需要的参数

/*

其实这条命令:$(CPP) $(CFLAGS) $ -o $*.s,就是一条预处理命令,将一个源文件预处理为.s文件后缀的文件,*为通配符。那源文件在哪里呢。其实这条命令.S.s: 已经说了以.S结尾的文件就是源文件。那这条命令.S.s这么说了呢?请看下面的后缀规则讲解。

*/

二、

老式风格的"后缀规则"

后缀规则是一个比较老式的定义隐含规则的方法。后缀规则会被模式规则逐步地取代。因为模式规则更强更清晰。为了和老版本的Makefile兼容,GNU make同样兼容于这些东西。后缀规则有两种方式:"双后缀"和"单后缀"。

双后缀规则定义了一对后缀:目标文件的后缀和依赖目标(源文件)的后缀。如".c.o"相当于"%o : %c"。单后缀规则只定义一个后缀,也就是源文件的后缀。

后缀规则中所定义的后缀应该是make所认识的,如果一个后缀是make所认识的,那么这个规则就是单后缀规则,而如果两个连在一起的后缀都被make所认识,那就是双后缀规则。例如:".c"和".o"都是make所知道。

因而,如果你定义了一个规则是".c.o"那么其就是双后缀规则,意义就是".c" 是源文件的后缀,".o"是目标文件的后缀。如下示例:

.c.o:

$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $

其中.c.o:这个命令表示源文件的后缀为.c,目标文件的后缀为.o;即也可理解为:生成.o的目标文件依赖条件是源文件.c

下面命令是将是所有的.c源文件都编译成.o的目标文件。

注:后缀规则不允许任何的依赖文件,如果有依赖文件的话,那就不是后缀规则,那些后缀统统被认为是文件名,

如:

.c.o: foo.h

$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $

这个例子,就是说,文件".c.o"依赖于文件"foo.h",而不是我们想要的这样:

%.o: %.c foo.h

$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $

因此后缀规则不允许任何的依赖文件。

linux c语言 编译.o时,提示:undefined reference to `main'

一般是缺少相应的头文件,新建项目时 选择console application,不要选MFC的那种项目。

主函数应该写成int main(),你写成mian了。

链接时缺少相关的库文件(.a/.so)

在此,只举个静态库的例子,假设源码如下。

先把test.c编译成静态库(.a)文件

gcc -c test.c

ar -rc test.a test.o

至此,我们得到了test.a文件。我们开始编译main.c

gcc -c main.c

这时,则生成了main.o文件,然后我们再通过如下命令进行链接希望得到可执行程序。

gcc -o main main.o

你会发现,编译器报错了:

/tmp/ccCPA13l.o: In function `main':

main.c:(.text+0x7): undefined reference to `test'

collect2: ld returned 1 exit status

其根本原因也是找不到test()函数的实现文件,由于该test()函数的实现在test.a这个静态库中的,故在链接的时候需要在其后加入test.a这个库,链接命令修改为如下形式即可。

gcc -o main main.o ./test.a  //注:./ 是给出了test.a的路径

【扩展】:同样,为了把问题说清楚,上面我们把代码的编译链接分开了,如果希望一次性生成可执行程序,则可以对main.c和test.a执行如下命令。

gcc -o main main.c ./test.a  //同样,如果不加test.a也会报错。

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

格式 gcc [option] [sourcefilename]

介绍一些常用的选项:最简单的是:gcc hello.c

默认的情况下将生成a.out的可执行性文件,你只需要在终端上输入./a.out就可以看到执行的结果.

如果你想指定生成目标文件的名字那么你可以加上 -o选项,命令如下:

gcc -o hello hello.c

命令如下:

gcc -c hello hello.c

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.编译命令-o Linux编译
文章起源:http://cdiso.cn/article/doogcop.html

其他资讯