gcc编译过程、C语言编译过程分析、环境变量设置、linux文件夹结构和用途介绍、常用文件和目录的操作命令、文件类型

参考链接:http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html

http://blog.csdn.net/novrose/article/details/7670477

http://blog.sina.com.cn/s/blog_7d5d42b40100ulqn.html

一、大小写后缀的区别

.s     汇编语言源程序;汇编
.S     汇编语言源程序;预处理,汇编

小写的s文件,在后期阶段不在进行预处理操作,所以我们不能在这里面写预处理的语句在里面

大写的S文件,还会进行预处理、汇编等操作,所以我们可以在这里面加入预处理的命令

out文件就是扩展名为out的文件,它本身不代表任何信息。在Linux中判断文件是否是可执行文件,首先要看文件的属性是否是可执行的,它没有一个默认的扩展名表示此文件为可执行文件。为了方便,Linux中可执行文件一般都是没有扩展名的。

------------------------------------------------------------------------------------------------------------------------------------------

1. a.c -----> a.i -----> a.s ------> a.o -------> a.out

预处理: gcc -E a.c -o a.i

编译为汇编代码:gcc -S a.i -o a.s ,生成汇编文件.s

汇编:gcc -c a.s o a.o,gas汇编器负责将其编译为目标文件

链接:gcc a.o -o a  gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。

对于上一小节中生成的test.o,将其与C标准输入输出库进行连接,最终生成程序test

2. ./a

./表示本级目录,如果不加,系统会自动到环境变量的目录中区寻找a

../表示上一级目录

~/

/

环境变量与php的语法

3. 环境变量

系统级环境变量:

用户级环境变量:

查看命令:export env set

设置环境变量的参考链接:http://www.jb51.net/LINUXjishu/77524.html

Linux中环境变量文件及配置:http://www.cnblogs.com/mengyan/archive/2012/09/04/2669894.html

4. 库文件连接

开发软件时,完全不使用第三方函数库的情况是比较少见的,通常来讲都需要借助许多函数库的支持才能够完成相应的功能。从程序员的角度看,函数库实际上就是一些头文件(.h)和库文件(so、或lib、dll)的集合。。虽然Linux下的大多数函数都默认将头文件放到/usr/include/目录下,而库文件则放到/usr/lib/目录下;Windows所使用的库文件主要放在Visual Stido的目录下的include和lib,以及系统文件夹下。但也有的时候,我们要用的库不再这些目录下,所以GCC在编译时必须用自己的办法来查找所需要的头文件和库文件。

例如我们的程序test.c是在linux上使用c连接mysql,这个时候我们需要去mysql官网下载MySQL Connectors的C库,下载下来解压之后,有一个include文件夹,里面包含mysql connectors的头文件,还有一个lib文件夹,里面包含二进制so文件libmysqlclient.so

其中inclulde文件夹的路径是/usr/dev/mysql/include,lib文件夹是/usr/dev/mysql/lib

5.1编译成可执行文件

首先我们要进行编译test.c为目标文件,这个时候需要执行

gcc –c –I /usr/dev/mysql/include test.c –o test.o
5.2链接

最后我们把所有目标文件链接成可执行文件:

gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test

Linux下的库文件分为两大类分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a结尾),二者的区别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。

5.3强制链接时使用静态链接库

默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库。

在/usr/dev/mysql/lib目录下有链接时所需要的库文件libmysqlclient.so和libmysqlclient.a,为了让GCC在链接时只用到静态链接库,可以使用下面的命令:

gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test

静态库链接时搜索路径顺序:

1. ld会去找GCC命令中的参数-L
2. 再找gcc的环境变量LIBRARY_PATH
3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的

动态链接时、执行时搜索路径顺序:

1. 编译目标代码时指定的动态库搜索路径
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
4. 默认的动态库搜索路径/lib
5. 默认的动态库搜索路径/usr/lib

有关环境变量:
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径

5. linux下各文件夹的结构说明和用途介绍

http://www.cnblogs.com/yyyyy5101/articles/1901842.html

http://www.cnblogs.com/wen858636827/archive/2012/12/26/2834373.html

6. 常用文件和目录操作命令

http://www.cnblogs.com/ggjucheng/archive/2012/08/22/2650464.html

7. linux文件类型大总结

http://www.jb51.net/LINUXjishu/151838.html

时间: 2024-10-24 18:39:40

gcc编译过程、C语言编译过程分析、环境变量设置、linux文件夹结构和用途介绍、常用文件和目录的操作命令、文件类型的相关文章

Linux下环境变量设置技巧,不用/etc/profile而是在/etc/profile.d目录下新建特定的shell文件来设置

区别: 1.两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/profile.d/设置所有用户生效,同样是永久变量,是全局变量. 2./etc/profile.d/比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d/下对应的shell脚本即可,不用像/etc/profile需要改动此文件. 3.需要注意的是,/etc/profile和/etc/profile.d同样是登录(login)级别的变量,当用户重新登录sh

[转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链

GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标

Windows 平台下 Go 语言的安装和环境变量设置

1. Go 语言 SDK 安装包下载和安装 最新稳定版 1.5.3 安装包 go1.5.3.windows-amd64.msi下载地址 https://golang.org/dl/,大小约 69 MB(作者上传了一份该版本安装包到 CSDN 资源,嫌国外网速慢可以去下载:http://download.csdn.net/detail/defonds/9408855),下载之后直接运行安装,安装路径就使用它默认的 C:\Go\ 即可,之后一路 Next 并完成安装. 2. Go 语言环境变量设置

(转)windows 下 Java 及 Python 环境变量设置

转自:http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html http://www.cnblogs.com/qiyeshublog/archive/2012/01/24/2329162.html 首先,你应该已经安装了 java 的 JDK 了,笔者安装的是:jdk-7u7-windows-x64 接下来主要讲怎么配置 java 的环境变量,也是为了以后哪天自己忘记了做个备份 1.进入“计算机”的“属性”选项,选择

Qt 环境变量设置

准备工作,在系统环境变量中增加如下项目:path=C:\Qt\Qt5.3.0\5.3\mingw482_32\bin:C:\Qt\Qt5.3.0\Tools\mingw482_32\bin;%path%QT_PLUGIN_PATH  C:\Qt\qwt-6.1.0\plugins    QTDIR                  C:\Qt\Qt5.3.0\5.3\mingw482_32编译QtCreator:安装QtCreator:编译Qwt:安装Qwt:使用Qwt,配置.pro文件:在建立

Windows下Java环境变量设置

应工作需要,接触到J2EE,现将Java环境变量设置笔记如下: 1.打开我的电脑–>属性–>高级–>环境变量 2.新建 系统变量   JAVA_HOME 和 CLASSPATH 变量名:JAVA_HOME 变量值:d:\Java\java\jdk1.6.0_45    (注意:物理路径末尾不要加 “\”) 变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 3. 选择“系统变量 ”中变量名为“Path

Linux学习——环境变量设置

一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量.例如我的mips-linux-gcc编译器在“/opt/au1200_rm/build_tools/bin”目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变量: 1.直接用export命令: #export PATH=$PATH:/opt/au1200_rm/build_tools/bin 查看是否已经设好,可用命令export查看: [[email protected] bin]# e

Linux Golang安装与环境变量设置

1.下载与安装 下载Golang安装包:go1.5.1.linux-amd64.tar.gz 使用tar命令将Go档案包解压到/usr/local目录下 tar -zxvf go1.5.1.linux-amd64.tar.gz -C /usr/local 2.环境变量设置 在profile文件添加下面四个环境变量(~/.bash_profile(单一用户) 或 /etc/profile(所有用户)) GOROOT:Go当前安装目录 export GOROOT=/usr/local/go GOPA