Linux 平台GCC使用小结
gcc -Wall [-I search_headfile_path] [-L search_lib_path] sourcefile -lNAME -o exe-name
-Wall选项打开所有最常用到的编译警告----推荐你总是使用该选项!
-I 扩展头文件(Include)搜索路径
-L 扩展库文件(Library)搜索路径
-lNAME 编译器选项“-lNAME”试图链接标准库目录下的文件名为“libNAME.a”中的对象文件。
另外的也可以链接通过命令行或环境变量指定的目录下的库文件(见-L选项)。
其他:
1.链接次序:
在类Unix系统上,传统上编译器和链接器搜索外部函数的次序是在命令行上指定的对象文件中从左到右的查找(不会回过头再去找)。
这意味着,包含函数定义的库文件、源文件、对象文件应该出现在使用该函数的库文件、源文件、对象文件之后,否则将出现链接错误。
2.gcc搜索路径
默认情况下,gcc在下面目录中搜索头文件:
/usr/local/include/
/usr/include/
在下面目录中搜索库:
/usr/local/lib/
/usr/lib/
搜索头文件的目录列表常被称为include路径,而搜索库的目录列表被称为搜索路径或链接路径。在这些路径中的目录是按次序搜索的,在上面的两个列表中从第一个到最后一个。例如,“/usr/local/include”中找到的头文件优先于“/usr/include”中的同名文件。类似的,“/usr/local/lib”中找到的库优先于“/usr/lib”中的同名库。
3.gcc搜索路径优先次序:
-I > 环境变量 > 标准目录
-L > 环境变量 > 标准目录
1. 从左到右搜索由命令行“-I”和“-L”指定的目录
2. 由环境变量,比如C_INCLUDE_PATH和LIBRARY_PATH,指定的目录
3. 默认的系统目录
在日常的使用情况中,通常用“-I”和“-L”选项把目录添加到搜索路径。
设置环境变量:
1> 修改.bash_profile文件(ubuntu为.profile) 设置后,需要注销,才能生效
2> 命令行(声明环境变量$NAME,并export NAME)设置后,仅对当前会话有效
4.共享库与静态库
在绝大部分系统上gcc编译程序时默认链接到共享库。使用选项“-lNAME”的情况下链接静态库。“libNAME”可以用于链接,但编译器首先会检查具有相同名字和“.so”为扩展名的共享库。当启动可执行文件时,载入器为了把共享库载入内存,必须先找到它。默认情况下,载入器仅在一些预定义的系统目录中查找共享库,比如“/usr/local/lib”和“/usr/lib”。如果库不在这些目录中,那它必须被添加到载入路径(load path)中去。
设置载入路径的最简单方法是通过环境变量LD_LIBRARY_PATH。
使用“-static”选项可以迫使gcc静态链接,避免使用共享库:
$ gcc -Wall -static -I/opt/gdbm-1.8.3/include/ -L/opt/gdbm-1.8.3/lib/ dbmain.c -lgdbm
5.预处理:
“-DNAME”选项在命令行上定义预处理宏NAME。
“-D”命令行选项可以用来定义有值的宏,形式是“-DNAME=VALUE”。
“-E”选项,可以直接看到预处理器对源代码处理后的效果。
“-save-temps” 选项除了保存预处理过的“.i”文件外,还会保存“.s”的汇编文件和“.o”的对象文件。
6.带调试信息进行编译:
GCC提供了“-g”调试选项来在对象文件和可执行文件中存储另外的调试信息。方便gdb
等调试器跟踪。
GNU Bash shell中,命令ulimit –c可以控制设定core文件的最大值。如果这个限定值是零,则不会生成core文件。
$ ulimit -c unlimited #扩大core文件的大小限制,以便允许写入任何大小的core文件
Linux 平台GCC使用小结的更多相关文章
- Linux 平台静默安装 Oracle客户端
需求:Linux平台,安装完整版Oracle客户端 Tips:如果只是用到sqlldr,sqlplus功能,可以参考<Linux上oracle精简版客户端快速部署>快速部署精简版:如果需要 ...
- Linux下Gcc生成和使用静态库和动态库详解(转)
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- Linux平台延时之sleep、usleep、nanosleep、select比较
Linux平台延时之sleep.usleep.nanosleep.select比较 标签: 嵌入式thread线程cpu多线程 2015-05-05 15:28 369人阅读 评论(0) 收藏 举报 ...
- Linux下Gcc生成和使用静态库和动态库详解
参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...
- linux C gcc -lm
使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数 ...
- Linux gcc/g++下GDB调试及其调试脚本的使用
GDB调试及其调试脚本的使用返回脚本百事通一.GDB调试 1.1. GDB 概述 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB ...
- 在Linux使用GCC编译C语言共享库
在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...
- 笔记整理--Linux平台MYSQL的C语言
Linux平台MYSQL的C语言API全列表 - 第三只眼的专栏 - 博客频道 - CSDN.NET - Google Chrome (2013/8/18 22:28:58) Linux平台MYS ...
- 如何在linux平台上编译安装zlib软件(公司部分线上机器缺少zlib不能安装supervisor)
文章在Centos 6.5 linux平台上演示一下如何进行编译安装zlib软件,并配置相关的选项加载使用.示范从下载到安装并配置进行使用过程一系列整套讲解,希望可以给网友考虑使用,谢谢. 工具 ...
随机推荐
- webapi frombody fromuri的参数绑定规则
在WebAPI中,请求主体(HttpContent)只能被读取一次,不被缓存,只能向前读取的流. 举例子说明: 1. 请求地址:/?id=123&name=bob 服务端方法: void Ac ...
- HDOJ 2561. 第二小整数 第k大问题
第二小整数 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- MariaDB学习
社区:http://www.mariadbpub.com/forum.php
- [LeetCode] Remove Nth Node From End of List 移除链表倒数第N个节点
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- 在 sublime 中运行 JavaScript 代码
安装 Node 环境,参考 Node.js入门 打开 Sublime,选择 Tools > Build System > New Build System... 会打开一个新的文件,粘贴以 ...
- hihocoder -1121-二分图的判定
hihocoder -1121-二分图的判定 1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Net ...
- HTML <meta> 标签,搜索引擎
关于Mate标签的详尽解释,请查看w3school 网址为:http://www.w3school.com.cn/tags/tag_meta.asp meta标签作用 META标签是HTML标记HEA ...
- MVC项目中,如何访问Views目录下的静态文件!
<!--注意,是system.webServer节点,而非system.web--><system.webServer> <handlers> <add na ...
- php 设计模式--准备篇
要了解设计模式 首先我们要先了解 php的命名空间和类的自动载入的功能 下面我们来说一下 命名空间 概念缘由:比如一个a.php的文章 但是我们需要两个 此时同一个目录下不可能存在两个a.php 那么 ...
- iOS 设置不同的字体颜色
//设置不同字体颜色 -(void)fuwenbenLabel:(UILabel *)labell FontNumber:(UIFont *)font AndRange:(NSRange)range ...