gcc解析

【gcc】

gcc编译过程:

hello.c(源文件)--[预处理-E]--hello.i(被修改的源文件)--[编译器-S]--hello.s(汇编程序)--[汇编器-c]--hello.o(可重定位目标程序)--[链接器]--hello(可执行程序)

【选项】

-o 产生目标文件(.i .o .s)

-c 通知gcc取消连接步骤,即编译源码并生成目标文件

-E 只运行c预编译器

-S 告诉编译器产生汇编语言文件后即停止编译

-Wall 对代码有问题的地方发出警告

-Idir 将dir目录加入搜索头文件的目录路径

-Ldir 将dir目录加入搜索库的目录路径

-llib连接lib库

-g在目标文件中嵌入调试信息,以便gdb之类的调试程序调用

【在vi编辑完成后输入crtl+s会导致终端卡死】

解决方法:crtl+q

【执行一个hello.c文件】

1:gcc -E hello.c -o hello.i //预处理

2:gcc -S hello.i -o hello.s //编译

3:gcc -c hello.s -o hello.o //汇编

4:gcc hello.o -o hello //连接

直接一步 gcc hello.c -o hello //直接编译连接成可执行目标文件,gcc -Wall hello.c -o hello会提示错误信息

gcc-c hello.cgcc -c hello.c -o hello.o //直接编译成可重定位目标文件(只编译不连接)

 

【gcc编译多文件】

gcc -Wall hello.c main.c -o hello

如果只改变了main.c文件只需要将main.c编译成main.o 然后 gcc -Wall hello.o main.o -o hello

【实例】

建立一个新用户test5,指定用户的宿主目录为/home/test5

useradd -d /home/test5 test5

 

1编写一个程序 hello.c

 

2gcc hello.c 会生成 一个a.out

 

3执行./a.out(默认不会在当前目录)

 

如何让linux在当前目录下找到可执行程序

第一步,没有参数的cd命令,代表回到用户的宿主目录

cd

第二步,打开宿主目录下的.bash_profile文件

vi .bash_profile

第三步,在PATH后面加:.代表在当前目录下找可执行文件

 

第四步,vi保存退出

:wq

 

第五步,让.bash_profile生效

. .bash_profile

 

每个用户都有各自的.bash_profile,

 

Int main(int arg,char*args[]){}   //arg表示参数个数,args表示参数

如a.out q   //那么q为2,因为a.out也是一个参数

 

生成可执行文件之后:

ldd 文件名 可以查看调用到哪些库

nm 文件名 查看调用的方法

GCC默认只链接C的标准库,不链接C++的标准库

连接时加上 –l 是连接指定的库文件libstdc++.so

例:gcc hello.o –o hello –l stdc++

如果要链接多个库gcc hello.o –o hello –l库0  -l 库1 –l 库2 …

C++中编译后会将函数的名字改变,这就是为什么编译的时候链接不到C的库,要指明c++库,这也是c++重载的原理

【使用外部库】-l选项

-lm 表示要链接libm.so(共享库)或者libm.a(静态库)库文件

 

【静态库与共享库】:

【静态库.a】:程序在编译链接的时候把库的代码连接到可执行文件中,程序运行的时候将不再需要静态库

 

【共享库.sa或.so】:程序在运行的时候才去链接共享库的代码,多个程序共享使用库的代码

 

【生成静态库】

ar rcs libhello.a hello.o //ar是gnu归档工具,rcs表示(replace and create)

链接生成:gcc -Wall main.clibhello.a -o main或者gcc -Wall -L.main.o -o main -lhello(-L.表示是当前目录)

l:链接共享库,只要库名去掉lib和版本号

L:链接库所在路径

~/.bash_profile

【生成动态库】

【如何安装g++】

1.      在vm上linux右键选择设置

2.      选择CD/DVD ->使用ISO镜像挂载

3.      进入root根目录->media目录->cd RH*进入磁盘->cd Pack* 进入包->ls 可以看见所有安装包

4.       安装命令自行百度

5.      g++ -v 查看安装

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值