关于【详细讲解gcc】,今天向乾小编给您分享一下,如果对您有所帮助别忘了关注本站哦。
内容导航:1、详细讲解gcc:用几张图轻松看懂GCC2、详细讲解gcc,gccg常见指令总结1、详细讲解gcc:用几张图轻松看懂GCC
GCC程序编译过程
GCC常用后缀名
GCC使用方法
最基础也是最高端的方法
Linux环境下man gcc 命令查看帮助信息
# 在这里列举man的使用方法回车 下一行page up 上一行page down 下一行home[方向键左]第一页end[方向键右] 最后一页空格 下一页b 上一页q 退出/string 从上往下搜索字符串string?string 从下往上搜索字符串stringn 下一个搜索匹配项N 上一个搜索匹配项
命令使用
GCC参数汇总
GCC常用参数
编译过程参数
库选项参数
linux下静态链接库和动态链接库格式
# 静态链接库.a [libname.a]
# 动态链接库.so [libname.so[主版本号.次版本号.发行号]]例如 libgupnp-dlna-gst-2.0.so.3.0.0
在Linux系统中:
头文件存放路径一般为/usr/include
库文件存放路径一般为/usr/lib
默认情况下的编译为动态链接
编译静态链接库
先生成目标文件 .oar crv [*.a] [*.o]调用静态链接库 gcc -o [file.c] -L [file.a]编译动态链接库
生成位置无关目标代码 gcc -fPIC -c [file.c]生成动态链接库 gcc -shared -o [*.so] [*.o]调用动态链接库 gcc -o [file] -L [file.so]为了使程序运行时加载动态链接库,将动态库拷贝到/usr/lib目录下警告选项
优化选项
越是优化代码,越是演练,越是思考,就越能发现C/C++的优势所在。
2、详细讲解gcc,gccg常见指令总结
gcc是linux系统集成的编译器在linux环境下编辑程序,首先需要克服的便是没有集成开发环境的一键式操作所带来的麻烦这其中涉及命令行操作、编译选项的设定、文件依赖关系的书写(makefile)等问题这里主要介绍的是关于gcc的常用命令行参数及其相应的作用(若编译C 文件,则只需将下列命令的 gcc 换为 g ,源文件的后缀应为 .C/.cpp/.c /.cc等),今天小编就来说说关于详细讲解gcc?下面更多详细答案一起来看看吧!
详细讲解gcc
gcc是linux系统集成的编译器。在linux环境下编辑程序,首先需要克服的便是没有集成开发环境的一键式操作所带来的麻烦。这其中涉及命令行操作、编译选项的设定、文件依赖关系的书写(makefile)等问题。这里主要介绍的是关于gcc的常用命令行参数及其相应的作用。(若编译C 文件,则只需将下列命令的 gcc 换为 g ,源文件的后缀应为 .C/.cpp/.c /.cc等)
基本格式:gcc [options] file1 file2... //若不加入参数,则按默认参数依次执行编译、汇编和连接操作,生成的可执行文件名为 a.out
常用参数:-E //只执行预处理操作
-S //只执行到编译操作完成,不进行汇编操作,生成的是汇编文件(.s 或 .asm),内容为汇编语言
-c //执行编译和汇编,但不进行链接,即只生成可重定位目标文件(.o),为二进制文件,不生成完整的可执行文件
-o filename //将操作后的内容输出到filename指定的文件中
-static //对于支持动态链接的系统,使用静态链接而不是动态链接进行链接操作
-g //编译时生成debug有关的程序信息(供gdb使用)
--save-temps //生成编译过程的中间结果文件(包括预处理文件(x.ii)、汇编代码(x.s)、目标文件(x.o)和最终的可执行文件)
-I PATH //在PATH指定的目录下寻找相关的include文件
-lxx //其中xx为指定函数库,对于Linux环境下的函数库,静态库后缀为.a,动态库后缀为.so,一般库名为libxx.a或libxx.so,如加入libm.so库,则使用参数-lm(去除lib和后缀.a\so)
-L PATH //在PATH指定的目录下寻找相关的库文件,即-lxx指定待链接的库,-L指定寻找该库的路径。不指定时搜索默认的库函数路径。
-std=xx //指定编译使用的语言标准
-x language //指定待编译文件的语言,而不是由编译器根据文件后缀自行判断。即默认情况下gcc根据文件后缀判断使用的编程语言。例如使用文件名hello作为源文件名是不合适的,应使用hello.c
-Wall //输出一些简单的错误以及一些可能存在问题的警告
-Wextra //输出-Wall不包含的警告等
-Werror //将警告视为错误输出
-D name=definition //加入宏定义,若不指定def,则默认为1
-O1、-O2 //规定编译器的优化等级,优化级数越高执行效率一般越好,但是优化会改变原有程序结构,使得其汇编不易理解
//一些进行缓冲区溢出实验时可能需要的选项
-fstack-protector\-fno-stack-protector //是否开启堆栈保护,这里的保护是在返回地址之前加入一个验证值来确保返回地址不被破坏
-z execstack //启用可执行栈,默认是禁用的
//(echo 0 >/proc/sys/kernel/randomize_va_space 关闭地址随机化,这是一个单独的命令,操作需要root权限)
用简单的Hello World看看这些指令的具体使用:
#include<iostream>
using namespace std;
int main()
{
cout<<"helloword!"<<endl;
return 0;
}
上面main.cpp的编译过程如下:
以下是几个常用的指令:
指令1:将源文件编辑为可执行文件
g main.cpp
执行该命令后,目录中多出了一个文件:a.out
其实我们也可以为生成的文件指定名字:
g main.cpp -o main//此处将生成文件的名字指定为main
执行完命令后,目录中确实生成了main的文件:
指令2:编译文件,并输出到main.s
g -S -o main.s main.cpp//编译main.cpp,并通过-o选项 ,把中间的.s文件保存至main.s中
其实上面的指令可以采用更精简的格式:
g -S main.cpp > main1.s//表示把编译后的文件写入到main1.s中
指令3:生成可重定位目标文件(即编译后的文件)
g -c main.cpp//生成main.o,不进行链接操作,即仅进行预处理、编译、汇编,而不进行链接
指令4:输出一些简单的错误以及一些可能存在问题的警告
g -Wall main.cpp -o output//将输出文件名指定为output
为了让编译器提示错误,此时先把上面的helloword程序修改,删除cout语句后的分号
此时可以,编译器确实给出了警告信息:
指令5:通过-save-temps选项输出所有中间代码
g -save-temps main.cpp
为了演示次命令的效果,此时清空所有文件,只保留main.cpp文件
执行上面的指令后:
生成目录中确实多了几个中间文件
本文关键词:详细讲解的近义词,详细讲解电压力锅工作原理,详细讲解二胡北京有个金太阳,详细讲解北京有个金太阳,详细讲解月球陨石视频。这就是关于《详细讲解gcc,用几张图轻松看懂GCC》的所有内容,希望对您能有所帮助!