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. [转]Asp.Net Core 简单的使用加密的Cookie保存用户状态

    本文转自:http://www.cnblogs.com/Joes/p/6023820.html 在以前的Asp.Net中可以用 FormsAuthentication 类的一系列方法来使用加密的Coo ...

  2. Caffe Python MemoryDataLayer Segmentation Fault

    转载请注明出处,楼燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/ 因为利用Pyhon来做数据的预处理比较方便,因此在data_l ...

  3. Mac OSX+VirtualBox+Vagrant+CentOS初体验

    1.安装VirtualBox VirtualBox下载地址 免费小巧非常适用,根据自己机器系统选择下载包 VirtualBox 安装包 2.安装并使用Vagrant 1)Vagrant下载地址 选择下 ...

  4. [LeetCode] Distinct Subsequences 不同的子序列

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  5. [LeetCode] Reverse Nodes in k-Group 每k个一组翻转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  6. LINUX操作系统VIM的安装和配置

    VIM的安装   在命令行敲入"vi"后按"tab"键,可以看到目前系统中只安装了vi和vim.tiny. vim是从VI发展而来的一个文本编辑器,功能更强大. ...

  7. List [][]

    # -*- coding:utf-8 -*-   L = [     ['Apple', 'Google', 'Microsoft'],     ['Java', 'Python', 'Ruby', ...

  8. js中的原型prototype

    var arr1 = new Array(12,34,98,43,38,79,56,1); arr1.sum=function (){ var result = 0; for(var i=0; i&l ...

  9. [HTML5] FileReader对象

    写在前面 前一篇文章介绍了HTML5中的Blob对象(详情戳这里),从中了解到Blob对象只是二进制数据的容器,本身并不能操作二进制,故本篇将对其操作对象FileReader进行介绍. FileRea ...

  10. 配置react native遇到的问题

    折腾了两天终于解决了问题,一开始用模拟器是报如下图的错 然后用真机的时候又报下图的错 这个错误网上有很多解决方法,说是要降级处理,将build.gradle中的1.3.1改成1.2.3,但是改完之后问 ...