gcc參数总结
/*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參数总结的更多相关文章
- 命令行參数选项处理:getopt()及getopt_long()函数使用
在执行某个程序的时候,我们通常使用命令行參数来进行配置其行为.命令行选项和參数控制 UNIX 程序,告知它们怎样动作. 当 gcc的程序启动代码调用我们的入口函数 main(int argc ...
- malloc()參数为0的情况
以下的代码片段输出是什么?为什么? char *ptr; ))==NULL) puts("Got a null pointer"); else puts("Got a v ...
- 一起talk C栗子吧(第一百二十七回:C语言实例--查看main函数的參数)
各位看官们,大家好,上一回中咱们说的是static关键字的样例,这一回咱们说的样例是:查看main函数的參数.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们.我们在第五十七回中介绍过mai ...
- C中參数个数可变的函数
一.什么是可变參数 我们在C语言编程中有时会遇到一些參数个数可变的函数,比如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一 ...
- 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数
1.指针数组 数组里面的每一个元素都是指针. 指针数组的案比例如以下: 易犯错误: 2.数组指针 归根结底还是指针,仅仅是取*的时候可以取出一整个数组出来. 数组指针:(一个指针指向了数组.一般 ...
- java课堂练习之可变參数与卫条件
/* 有人邀请A,B,C,D,E,F 6个人參加一项会议,这6个人有些奇怪.由于他们有非常多要求,已知: 1)A,B两人至少有1人參加会议: 2)A,E,F 3人中有2人參加会议. 3)B和C ...
- 【Unity3D】【NGUI】怎样动态给EventDelegate加入參数
NGUI版本号:3.6.8 注意:參数必须是公共成员变量.不能是栈上的.或者私有的(就是暂时在函数里面定义的或者是函数的參数都不行) using UnityEngine; using System.C ...
- Lua学习教程之 可变參数数据打包与解包
利用table的pack与unpack进行数据打包与解包.測试代码例如以下: print("Test table.pack()----------------"); functio ...
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析
作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083 一. 相关方法简单介绍 1. 状态保存方法演示 ...
随机推荐
- 解决 Jackson反序列化 Unexpected token ... , expected VALUE_STRING: need JSON String that contains type id (for subtype of ...)
首先检查是否是 objectMapper.enableDefaultTyping(); 的受害者.优先考虑删除该配置. 使用Jackson把数组的json字符串反序列化为List时候报了个JsonMa ...
- 【Vijos1534】高性能计算机(DP)
题意:有NA个A与NB个B两种任务需要完成,完成一段长度为X的A任务需要时间ta+ka*x*x,B任务类似,连续的同一种任务不能分成两段运行 有P台可以并行运算的计算机,求最快完成所有任务的时间 1≤ ...
- 页面之间传值的方法asp
原文发布时间为:2008-06-02 -- 来源于本人的百度文章 [由搬家工具导入] asp.net页面间传值 今天学习中要在两个页面中传值,网上搜了一下,asp.net主要用到三个方法,前两个req ...
- 快充 IC BQ25896 的 常用參數
一: POWER-PATH MANAGEMENT (有接 adapter) 1:Vbat > Vsysmin,Isys = 0A, BATFET disable Vsys = Vbat + 50 ...
- 牛客网 Wannafly挑战赛9 C.列一列-sscanf()函数
C.列一列 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld 链接:https://www.now ...
- 转载:P2P技术原理及应用(2)
转载allen303allen的空间 在Gnutella网络中存在以下问题: 冗余消息多,对带宽的消耗存在一定的浪费.Gnutella网络协议采用泛洪式(Flooding)消息传播机制,这种消息传播机 ...
- oracle 树查询
select LPAD('-----',t.menu_level)||t.obj_id,t.*,rowid from imes10dba.tb_adm_menu t start with t.pare ...
- 邁向IT專家成功之路的三十則鐵律 鐵律二十九 IT人富足之道-信仰
天地自然的循環法則,讓每一個人都必須經歷生.老.病.死.喜.怒.哀.樂,然而至始至終無盡的煩惱總是遠多於快樂,因此筆者深信每一個人在一生當中,都必須要有適合自己的正確信仰,他可以在你無法以物質力量來解 ...
- SilverLight:基础控件使用(2)-ComboBox,ListBox控件
ylbtech-SilverLight-Basic-Control:基础控件使用(2)-ComboBox,ListBox控件 直接在 XAML 代码中设置 Items 和通过后台代码绑定数据源 Com ...
- 从头写一个Cucumber测试(二) Cucumber Test
转载:https://yaowenjie.github.io/%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/cucumber-test-part-2 承接上文 前一篇博 ...