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_PATHLIBRARY_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. 第9章 Shell基础(4)_Bash的运算符及环境变量配置文件

    5. Bash的运算符 5.1 数值运算与运算符 5.1.1 declare 声明变量类型:#declare [+/-] [选项] 变量名 选项 说明 - 给变量设定类型属性 + 取消变量的类型属性 ...

  2. Oracle 获取当前日期及日期格式

    http://blog.sina.com.cn/s/blog_6168ee920100l2ye.html Oracle 获取当前日期及日期格式 获取系统日期:  SYSDATE()   格式化日期:  ...

  3. 关于EventEmitter的用法

    EventEmitter的基本用法: var EventEmitter = require("events").EventEmitter; var ee = new EventEm ...

  4. python_接口开发

    一.GET和POST请求from flask import Flask,jsonifydata = { 'name':'Jerry', 'sex':'男', 'age':'18'}app = Flas ...

  5. [LeetCode] Counting Bits 计数位

    Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the ...

  6. c#与JavaScript实现对用户名、密码进行RSA非对称加密

    博主最近手上这个项目呢(就是有上百个万恶的复杂excel需要解析的那个项目,参见博客:http://www.cnblogs.com/csqb-511612371/p/4885930.html),由于是 ...

  7. 动态生成验证码———MVC版

    上面有篇博客也是写的验证码,但那个是适用于asp.net网站的. 今天想在MVC中实现验证码功能,弄了好久,最后还是看博友文章解决的,感谢那位博友. 首先引入生成验证码帮助类. ValidateCod ...

  8. Google C++命名规范

    时间:2014.03.02 地点:基地 -------------------------------------------------------------------------------- ...

  9. xamarin.forms uwp app部署到手机移动设备进行测试,真机调试(device portal方式部署)

    最近学习xamarin.刚好 手上有一个lumia 930.所以试一试把uwp app部署到手机上,并真机调试一把. 目前环境: 1.开发pc电脑是win10,版本1607.加入了insider,所以 ...

  10. PHP 之道

    http://wulijun.github.io/php-the-right-way/