您的位置:首页 > 运维架构 > Linux

linux源码编写入门gcc

2016-07-22 11:21 274 查看
使用c语言进行编译的简单实例:

编写程序源代码:hello world



开始编译和测试执行



在默认状态下,如果直接以gcc编译源码,并没有加上任何参数,则执行文件会默认为a.out这个文件名。

然后执行这个a.out文件就行



那么如果我想产生目标文件object file来进行其他操作,而且执行文件的名字也不是默认的.a.out



hello.o 就是目标文件,再利用这个目标文件制作出一个名为hello的执行文件。



那么为什么要多此一举,得到目标文件呢?

因为源码文件可能并非只有一个文件,无法直接进行编译,这个时候需要先生成目标文件,然后再以链接制成二进制可执行文件。

比如这个例子:

vim thanks.c



vim thanks2.c



可以看出,thanks.c代码的主函数中调用了thanks2.c中的函数。

对两份源码进行编译成目标文件



此时这只是两个独立的目标文件,thanks.o、thanks2.o

要将他们链接成一个二进制可执行文件



如果有一天,更新了thanks.c这个源码的内容,那么你只要重新编译thanks2.,c来产生新的thanks2.o,然后再用gcc -o重新链接生成新的二进制执行文件即可,不必编译其他没有改过的源码文件。

调用外部函数库:

如果要计算数学公式,比如三角函数和指数函数,就要加入函数库来计算。

比如主程序是这样的:



sin函数在linux中是写在libm.,so这个函数库当中的,由于没有在源码中将这个函数库加进去,因此需要在编译与链接时将这个函数库链接进执行文件里面。



-lm:-l 加入某个函数库(library),m表示libm.so这个函数库

-L/lib -L/usr/ilb 表示我要的函数库libm.so在/lib或者/usr/lib中搜索。

需要注意的是,linux默认是将函数库放置在/lib与/usr/lib当中,所以么有写-L/lib -L/usr/ilb,也是没有关系的,如果你自定义的函数库不是放在这两个目录下, 那么-L/path就很重要了。

gcc的简单用法:

在上面我们使用了 gcc -c ;gcc -o等

gcc -c:仅将源码编译成为目标文件,并不制作链接功能,即会生成hello.o文件,但不会生成可执行文件。

gcc -o hello hello.c 将编译结果输出成某个特定的文件名,-o后面跟的要输出的binary file文件名

gcc sin.c -lm -L/lib -L/usr/lib -I/usr/include 在进行编译时,将链接的函数库和头文件写入

-lm 指的是libm.so函数库,-L函数库的搜索目录,-I源码内include文件目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: