/*gcc 命令总结*/

补充下gcc的知识,免得被大自然说编译原理不行..



1、-o 參数



參数说明: -o參数用来指定生成程序的名字



gcc test.c 会编译出一个名为a.out的程序

gcc test.c -o test 编译出一个名为test的程序



2、-l參数和-L參数





參数说明: -l參数就是用来指定程序要链接的库。-l參数紧接着就是库名,比方。我要链接到数学库。它的库名是m。它的库文件名称是libm.so(一般放在/lib、/usr/lib/usr/local/lib文件夹下),非常easy看出,把库文件名称的头lib和尾.so去掉就是库名了



放在/lib和/usr/lib和/usr/local/lib里的库直接用-l參数就能链接了,但假设库文件没放在这三个文件夹里,而是放在其它文件夹里,这时我们仅仅用-l參数的话。链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”。也就是链接程序ld在那3个文件夹里找不到libxxx.so。这时另外一个參数-L就派上用场了。比方经常使用的X11的库。它在/usr/X11R6/lib文件夹下,我们编译时就要用-L/usr/X11R6/lib -lX11參数,-L參数跟着的是库文件所在的文件夹名。再比方我们把libtest.so放在/aaa/bbb/ccc文件夹下,那链接參数就是-L
/aaa/bbb/ccc -ltest





手工来写链接參数总是非常麻烦的,还好非常多库开发包提供了生成链接參数的程序。名字一般叫xxxx-config,一般放在/usr/bin文件夹下,比方, mysql的链接參数生成程序是mysql_config(注意下划线。这个比較特殊),运行mysql_config --libs:

-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl 

这些就是mysql须要的链接參数,执行命令自己主动生成。多简单省事。





xxx-config除了--libs參数外另一个參数是--cflags用来生成头文件包括文件夹的。也就是-I參数,运行 mysql_config --cflags:

-I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing  -g

这就是mysql须要的头文件包括文件夹

如今的问题就是如何用这些输出结果了,最直接的方法就是复制粘贴或者照抄。更好的办法是在编译命令行里增加这个`xxxx-config --libs --cflags`,比方编译一个mysql程序:gcc mysql.c `mysql_config --libs --cflags`

就OK了(我前几天的博客里提到过这个问题。^_^)

3、-include和-I參数

參数说明: -include用来包括头文件,但普通情况下包括头文件都在源代码里用#include xxxxxx实现,-include參数非常少用。

-I參数是用来指定头文件文件夹,/usr/include文件夹通常是不用指定的,gcc知道去那里找,可是假设头文件不在/usr/include里我们就要用-I參数指定了。比方头文件放在/myinclude目录里,那编译命令行就要加上-I /myinclude參数了,假设不加你会得到一个"xxxx.h: No such file or directory"的错误。-I參数能够用相对路径,比方头文件在当前文件夹,能够用-I.来指定。上面我们提到的--cflags參数就是用来生成-I
參数的

4、-O參数



參数说明: 这是一个程序优化參数,一般用-O2就是。用来优化程序用的,比方gcc test.c -O2,优化得到的程序比没优化的要小,运行速度可能也有所提高



5、-shared參数



參数说明: 编译动态库时要用到,比方gcc -shared test.c -o libtest.so



6、几个相关的环境变量(用cmake时须要)



PKG_CONFIG_PATH:用来指定pkg-config用到的pc文件的路径。默认是/usr/lib/pkgconf

ig,pc文件是文本文件,扩展名是.pc,里面定义开发包的安装路径,Libs參数和Cflags參数等等。

CC:用来指定c编译器

CXX:用来指定cxx编译器

LIBS:跟上面的--libs作用几乎相同

CFLAGS:跟上面的--cflags作用几乎相同

CC,CXX,LIBS。CFLAGS手动编译时一般用不上。在做configure时有时用到,普通情况

下不用管

环境变量设定方法:export ENV_NAME=xxxxxxxxxxxxxxxxx





7、參考:http://wenku.baidu.com/view/655f48b91a37f111f1855b36.html

gcc參数总结的更多相关文章

  1. 命令行參数选项处理:getopt()及getopt_long()函数使用

         在执行某个程序的时候,我们通常使用命令行參数来进行配置其行为.命令行选项和參数控制 UNIX 程序,告知它们怎样动作. 当 gcc的程序启动代码调用我们的入口函数 main(int argc ...

  2. malloc()參数为0的情况

    以下的代码片段输出是什么?为什么? char *ptr; ))==NULL) puts("Got a null pointer"); else puts("Got a v ...

  3. 一起talk C栗子吧(第一百二十七回:C语言实例--查看main函数的參数)

    各位看官们,大家好,上一回中咱们说的是static关键字的样例,这一回咱们说的样例是:查看main函数的參数.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们.我们在第五十七回中介绍过mai ...

  4. C中參数个数可变的函数

    一.什么是可变參数 我们在C语言编程中有时会遇到一些參数个数可变的函数,比如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一 ...

  5. 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数

     1.指针数组 数组里面的每一个元素都是指针. 指针数组的案比例如以下: 易犯错误: 2.数组指针 归根结底还是指针,仅仅是取*的时候可以取出一整个数组出来. 数组指针:(一个指针指向了数组.一般 ...

  6. java课堂练习之可变參数与卫条件

    /*  有人邀请A,B,C,D,E,F 6个人參加一项会议,这6个人有些奇怪.由于他们有非常多要求,已知:  1)A,B两人至少有1人參加会议:  2)A,E,F 3人中有2人參加会议.  3)B和C ...

  7. 【Unity3D】【NGUI】怎样动态给EventDelegate加入參数

    NGUI版本号:3.6.8 注意:參数必须是公共成员变量.不能是栈上的.或者私有的(就是暂时在函数里面定义的或者是函数的參数都不行) using UnityEngine; using System.C ...

  8. Lua学习教程之 可变參数数据打包与解包

    利用table的pack与unpack进行数据打包与解包.測试代码例如以下: print("Test table.pack()----------------"); functio ...

  9. 【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析

    作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083 一. 相关方法简单介绍 1. 状态保存方法演示 ...

随机推荐

  1. bzoj3210 花神的浇花集会 坐标

    题目大意:给定平面上的n个点,求一个点到这n个点的切比雪夫距离之和最小 与3170不同的是这次选择的点无需是n个点中的一个 首先将每个点(x,y)变为(x+y,x-y) 这样新点之间的曼哈顿距离的一半 ...

  2. http请求代理proxy-ajax

    今天把项目中的反向代理脚本程序抽成了一个插件,通过配置文件配置代理的http请求,这样使用起来比较方便,每位开发成员都可以用自己配置的代理调试代码.也可以用来直接做http代理,你甚至都不用Charl ...

  3. 学习javascript设计模式之单例模式

    1.单例模式的核心是确保只有一个实例,并提供全局访问. 2.惰性单例 指的是在需要的时候才创建对象实例. 如在页面中创建唯一div 普通做法 var createDiv = (function(){  ...

  4. 什么是GOP(转)

    所谓GOP,意思是画面组,MPEG格中的帧序列,分为I.P.B三种,如排成IBBPBBPBBPBBPBBP...样式,这种连续的帧图片组合即为GOP(画面群,GROUP OF PICTURE),是MP ...

  5. 标准C程序设计七---113

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  6. 初级Springboot(一)

    初级Springboot(一) 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 一.了解Springboot 做Java开发的小伙伴都知道,我们在做项目的时候,需要去写大量的配置文件 ...

  7. go 依赖包管理工具gb安装报错

    尝试了下gb工具,发现有个问题: [root@etcd1 test]# go get github.com/constabulary/gb/... /home/gopath/src/github.co ...

  8. Dance In Heap(二):一些堆利用的方法(上)

    0×00 前面的话 在前面的文章里我们稍微有点啰嗦的讲解了堆中的一些细节,包括malloc.free的详细过程,以及一些检查保护机制,那在这篇文章里,我们就开始结合这些机制,以64位为例来看一看如何对 ...

  9. 偏执的iOS逆向研究员:收集全版本的macOS iOS+越狱+内核调试

    Intro 虽然“只有偏执狂才能够生存”这句话已经被假药停给毁了,但是作为一只有逼格的高大上的iOS逆向分析研究员,难道如果有现成的macOS/iOS全版本镜像可以下载并且无限“漫游”,难道你就不想来 ...

  10. OpenSceneGraph FAQ 【转】

    1.地球背面的一个点,计算它在屏幕上的坐标,能得到吗? 不是被挡住了吗? 答:计算一个空间点的屏幕坐标,使用osgAPEx::GetScreenPosition函数.当空间点处于相机视空间内(不管它是 ...