share extension 不显示_这篇文章不知道起什么名字

我这个文章不知道起什么名字,我就是在课堂上面搭建的了一个GCC的环境

d58e4b1e811fbe9aaa2d8b89f75dd5d8.png

help命令展示所有的帮助文件

19b9e329e0acb49d79ab6045543a17bf.png

打印所有平台的编译信息

ec2c7bd95db9a3623c38f841b9a4d72d.png

gcc版本

e300341ad04b4a6319ab49f4e289da32.png

对文件进行头文件展开

96669b4d093cbf5710e3e55bb4941dfc.png

-E是展开头文件的编译开关

4980542388affb96f0eb367812aa9bfc.png

这个开关是生成汇编语言

0ca8ac43711a96a75965a691de1f220a.png

这是中间的文件,还没有组装

b854ac802c81974be7ffcd5fce387729.png

多文件编译

这个命令可以一次传多个源文件给编译器

414fa15ea68ea19ffcfe7776f3b2edfc.png

e6ebb1de318405d9a6fba0be70dfef40.png

可以是指定的头文件编译

abfcb1586c7562a9f83ad497fc13fc66.png

在这个文件里面可以看见我的头文件所在

12b81538b033d0189ee99adaed355cf4.png

打开编译过程的详细开关

b38a548c9b62431b53c6565730d5aa1c.png

  • -fverbose-asm:在编译成汇编语言时,把C变量的名称作为汇编语言中的注释

fa8096f16ac8e42ba1d1050243a146dd.png

e3a53b5e68ff3b93c5312d65278430ad.png

0963c8e1685bc814585b5d5f6787875e.png

这个可以一次编译许多的中间文件

  • -save-temps:自动输出预编译处理文件、汇编文件、对象文件,编译正常进行

  • –help:显示gcc帮助说明

  • -target-help:显示目标机器特定的命令行选项

  • –version:显示gcc版本号和版权信息

  • -E:只进行预处理,不编译

  • -S:只编译,不汇编

  • -c:只编译、汇编,不链接

  • -pipe:使用管道代替临时文件

  • -combine:将多个原文件一次性传递给汇编器

  • -g:包含调试信息

  • -I:指定include包含文件的搜索目录

  • -o:输出成指定文件名

  • -v:详细输出编译过程中所采用的每一个选项

  • -ggdb:在可执行文件中包含GDB调试使用的信息

  • -fverbose-asm:在编译成汇编语言时,把C变量的名称作为汇编语言中的注释

  • -save-temps:自动输出预编译处理文件、汇编文件、对象文件,编译正常进行

  • -fsyntax-only:只测试源文件语法是否正确,不会进行任何编译操作

  • -ffreestanding:编译成独立程序,而非宿主程序

  • -ansi:ANSI标准

  • -std=c99:C99标准

  • -std=gnu89:ISO/IEC 9899:1990以及GNU扩充

  • -std=gnu99:ISO/IEC 9899:1999以及GNU扩充

  • -trigraphs:支持ISO C三字符组

  • -w:忽略所有警告

  • -Werror:不区分警告和错误,遇到任何警告都停止编译

  • -Wall:开启大部分警告提示

  • -Wshadow:某语句块作用域变量与更大作用域的另一变量同名时发出警告(次警告未包含在-Wall选项中,需单独开启)

  • -Wextra:对所有合法但值得怀疑的表达式发出警告

  • -O0:关闭所有优化选项

  • -O1:第一级别优化,使用此选项可使可执行文件更小,运行更快,并不会增加太多编译时间,可以简写为-O

  • -O2:第二级别优化,采用了几乎所有优化技术,使用此选项会延长编译时间

  • -O3:第三级别优化,在-O2的基础上增加了产生inline函数、使用寄存器等优化技术

  • -O5:此选项类似于-O2,作用是优化所占用的空间,但不会进行性能优化,常用于生成最终版本

  • 备注:指定了-L dir和-l库名参数,但通过ldd命令查看时,找不到指定链接的.so文件,此时需要通过修改LD_LIBRARY_PATH或者/etc/ld.so.conf文件来指定动态库的目录,通过此做法可解决库无法链接的问题。

    • -x:使用此选项可以指定自定义的源文件扩展名,类型有c,c-header,cpp-output,assembler,assembler-with-cpp,none。凡是-x后面所列的所有文件都会被视为其指定的类型,要想改变类型可以再一次使用-x选项,或者使用-x none回到默认设置

    • -l library:进行连接时搜索名为library的库

    • -L dir:把dir加入到搜索库文件的路径列表中

    • -Dname:预定义一个名为name的宏,值为1

    • -Dname=definition:预定义名为name,值为definition的宏

    • -M:告诉预处理器输出一个适合make的规则,用于描述各目标文件的依赖关系。对于每个源文件,预处理器输出一个make规则,该规则的目标项(target)是源文件对应的目标文件名,依赖项(dependency)是源文件中#include引用的所有文件。生成的规则可以是单行,但如果太长,就用’/’换行符连续成多行。规则显示在标准输出,不产生预处理过的C程序

    • -C:告诉预处理器不要丢弃注释。配合-E选项使用

    • -P:告诉预处理器不要产生#inline命令。配合-E选项使用

    • -static:在支持动态链接的系统上,阻止链接共享库。

    • -nostdlib:不链接系统标准启动文件和标准库文件,只把指定的文件传递给链接器

    • -W:打印一些额外的警告信息

    • -w:禁止显示所有警告信息

    • -msse/-msse2/mmx/mno-sse/mno-sse2/mno-mmx:使用或者不使用MMX、SSE、SSE2指令

    • -m32/-m64:生成32位/64位机器上的代码

    • -mpush-args/mon-push-args:(不)使用push指令来进行存储参数,默认是使用。

    • -mregparm=num:当传递整数参数时,控制所使用寄存器的个数。

  • 创建并使用静态链接库方法

    • 编写C源文件,设为static_lib.c,其中写入需要重复调用的函数,然后使用命令gcc -c static_lib.c生成目标文件static_lib.o

    • 使用ar工具创建静态库,命令格式:ar rcs static_lib.a static_lib.o

    • 编写C头文件static_lib.h,其中写入这些函数的原型声明

    • 编写主函数app.c,引入头文件static_lib.h,这样就可以正常使用那些自定义的可复用函数

    • 使用命令gcc app.c -static ./static_lib.a -o app编译生成可执行文件app

  • 创建并使用动态库方法

    • 编写C源文件share_lib.c,写入需要重复调用的函数,然后使用命令gcc -shared -FPIC -o share_lib.so share_lib.c生成动态库文件share_lib.so

    • 编写C头文件share_lib.h,写入函数的原型声明

    • 编写主函数app.c,引入头文件share_lib.h,然后就可以调用在动态库中自定义的函数

    • 使用命令gcc app.c ./share_lib.so -o app编译生成可执行文件app。

d1e83085c1633b41bab10acebf20226f.png

-M这个牛逼

3bfad5a64e391a2a0a8218a86a9fb4a0.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值