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使用小结的更多相关文章

  1. Linux 平台静默安装 Oracle客户端

    需求:Linux平台,安装完整版Oracle客户端 Tips:如果只是用到sqlldr,sqlplus功能,可以参考<Linux上oracle精简版客户端快速部署>快速部署精简版:如果需要 ...

  2. Linux下Gcc生成和使用静态库和动态库详解(转)

    一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...

  3. Linux平台延时之sleep、usleep、nanosleep、select比较

    Linux平台延时之sleep.usleep.nanosleep.select比较 标签: 嵌入式thread线程cpu多线程 2015-05-05 15:28 369人阅读 评论(0) 收藏 举报 ...

  4. Linux下Gcc生成和使用静态库和动态库详解

    参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...

  5. linux C gcc -lm

    使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数 ...

  6. Linux gcc/g++下GDB调试及其调试脚本的使用

    GDB调试及其调试脚本的使用返回脚本百事通一.GDB调试 1.1. GDB 概述 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB ...

  7. 在Linux使用GCC编译C语言共享库

    在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...

  8. 笔记整理--Linux平台MYSQL的C语言

    Linux平台MYSQL的C语言API全列表 - 第三只眼的专栏 - 博客频道 - CSDN.NET - Google Chrome (2013/8/18 22:28:58)   Linux平台MYS ...

  9. 如何在linux平台上编译安装zlib软件(公司部分线上机器缺少zlib不能安装supervisor)

    文章在Centos  6.5 linux平台上演示一下如何进行编译安装zlib软件,并配置相关的选项加载使用.示范从下载到安装并配置进行使用过程一系列整套讲解,希望可以给网友考虑使用,谢谢.   工具 ...

随机推荐

  1. 复选框checkbox选中个数限制

    今天遇到一个问题:就是项目里有用到限制 checkbox框选中个数,看起来很简单,但是确实花了点时间才弄清楚,废话不多说,上代码 <!DOCTYPE html> <html lang ...

  2. 国内优秀的Android资源

    因为一些大家都知道的原因,Android很多官方出品的优秀开发资源在国内无法访问. 国内的同行们对此也做出了很多努力,有很多朋友通过各种手段把很多优秀的资源搬运到了国内,为国内android开发者提供 ...

  3. java的JSP技术

    java的JSP技术 [toc] 1.JSP简介 Jsp技术是用来开发java web的页面显示的,所有MVC模型里面的视图层,所以视图层的开发 jsp不是编程语言,三个英文是java server ...

  4. Windows远程连接Linux

    目录 xrdp方式 vnc方式 xrdp方式 ----------------------------------------------------------------------------- ...

  5. C++11中的std::function

    看看这段代码 先来看看下面这两行代码: std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::fun ...

  6. SpringBoot揭秘:快速构建微服务体系

    chapter 2: 饮水思源:回顾与探索Spring框架本质 IoC其实有两种方式,一种是DI(dependency Injection),一种是DL(dependency Lookup 依赖查找, ...

  7. 从PHP底层源码去深入理解数组,并用C模拟PHP关联数组(原创)

    PHP是一门入门容易,使用范围广泛的语言,以其灵活性以及web后端开发被很多人熟知,也被很多人戏称“PHP是世界上最好的语言”.本人是一名“忠实”的PHPer,相信用过PHP的程序员都会体会到PHP数 ...

  8. HDF5基本使用方法

    HDF5, 大量(海量?)数据存储的一种解决方案. HDF的全称是Hiearchical Data Format, 5是版本号(未考证过TODO). 一个HDF5文件操作起来就像一个独立的文件系统. ...

  9. 通过iMindMap改善你的工作方式的教程

    对于iMindMap 10,已经介绍了很多新增与改进的功能,你以为已经结束了?其实不然,本文,小编还会继续和你分享它的一个新功能与一个更新功能.这两个功能将在不经意间改善你的工作方式. 多媒体支持 在 ...

  10. 一.Jenkins安装

    1.Java安装: 安装包:jdk-8u73-windows-x64.exe.jdk-8u73-windows-i586.exe(i586是32位系统包) Java环境变量配置:http://jing ...