Linux gcc使用

参考:《Linux C编程从基础到实践》


#######################################

静态库和动态库的区别


静态库是指编译链接时,将库文件的代码全部加入可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名通常为".a"。

动态库与之相反,在编译链接时并没有将库文件的代码加入可执行文件中,而是在程序执行时加载库,这样可以节省系统的开销。一般动态库的后缀名为".so"


note:gcc在编译时默认使用动态库


###########################################


gcc基本使用格式:

gcc [选项] 文件名

gcc通过选项对程序的生成进行全名控制,每个选项可以有多种取值

常用选项:

-c:仅对源文件进行编译,不链接生成可执行文件。在对源文件进行差错或只需产生目标文件时可以使用该选项

-o filename:将进过gcc处理过的结果保存为filename,这个结果文件可以是预处理文件、汇编文件、目标文件或者最终的可执行文件。假设被处理的源文件为                             file1,如果这个选项被忽略,那么生成的可执行文件的默认名称为a.out;目标文件的默认名为file1.o;汇编文件的的默认名为file1.s;生成的预处理                       文件发送到标准输出设备stdout

-g 或 -gdb:在可执行文件中加入调试信息,方便进行程序的调试。如果使用"-gdb"选项,表示加入gdb扩展的调试信息,以便使用gdb来进行调试

-O[0, 1, 2, 3]:对生成的代码进行优化,括号中的部分为优化级别,默认的情况为2级优化,0为不优化。优化和调试通常不兼容,同时使用"-g"和"-O"选项经常会使                        程序产生奇怪的运行结果,所有不要同时使用"-g"和"-O"选项


note:gcc的命令选项可以组合使用,不过在使用时,每个命令选项都要有一个自己的连字符"-"。如果采用简写的方式,很可能使命令的含义完全不同。


#############################################


gcc应用实例

C语言源文件test.c:

#include <stdio.h>                   //声明库函数
int main(void)
{
    printf("This is a gcc test!\n"); //输出一个字符串
    return 0;
}


gcc命令对这个文件进行编译:

gcc -o test test.c



实际开发过程中经常遇到应用代码比较复杂的情况,此时采用主函数和其他函数放在不同文件中的方法。除了主程序外,每个函数都由函数声明(函数头)和函数实现(函数体)两部分组成。函数的声明一般放在头文件(.h)中,而函数的定义文件放在实现文件中(.c),gcc可以很容易地把多个源文件编译成目标代码并进行链接


test.c源代码如下:

#include <stdio.h>
void test_printf(void)
{
    printf("This is a test from anthor.c!\n");
}

test.h源代码如下:

void test_printf(void);

main.c源代码如下:

#include <stdio.h>
#include "test.h"
int main(void)
{
    printf("This is a gcc test!\n");
    test_printf();
    return 0;
}

gcc编译命令:

gcc -o main main.c test.c


                                                                                                                                                                                                                                                                                   

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值