/*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. 开源编辑器ueditor

    http://ueditor.baidu.com/website/onlinedemo.html

  2. d3 svg简单学习

    矩形 <rect x="/> 圆形 <circle cx="/> 椭圆 <ellipse cx="/> 线 <line x1=& ...

  3. Activation(hdu 4089)

    题目:仙5的激活序列.有以下4种情况: 1.注册失败,但是不影响队列顺序 ,概率为p1 2.连接失败,队首的人排到队尾,概率为p2 3.注册成功,队首离开队列,概率为p3 4.服务器崩溃,激活停止,概 ...

  4. DevExpress GridControl 控件点滴

    一.常用控件样式 public void setDgv(DevExpress.XtraGrid.Views.Grid.GridView gridView1) { gridView1.OptionsVi ...

  5. 洛谷P1372 a/b problem

    题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌.1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定 ...

  6. LOJ#2302. 「NOI2017」整数

    $n \leq 1000000$个操作:一,给$x$加上$a*2^b$:二,问$x$的某个二进制位$k$.$b,k \leq 30n$,$|a| \leq 1e9$. 30暴露了一切..可以把30个二 ...

  7. es6总结(十)--class

  8. DOM节点太多导致页面卡顿的优化方法

    http://developer.51cto.com/art/201504/473422.htm

  9. python笔记4:高级特性

    4 高级特性 4.1  切片 [:] *注:-- list和tuple,字符串都支持切片 4.2 迭代 Iteration for ... in 及 for ... in if 两个变量迭代时, 例1 ...

  10. Spring Tool Suite(STS)安装

    Spring Tool Suite是一个基于Eclipse的开发环境,可以自定义用于开发Spring应用程序.它提供了一个随时可用的环境来实现,调试,运行和部署Spring应用程序,包括Pivotal ...