g++

gcc / g++分别是gnu的c / c++编译器, gcc/g++在执行编译工作的时候,总共需要4步:

预处理 -> 生成 .i 文件
编译 -> 汇编代码 .s文件
汇编 -> 有汇编变为目标代码 .o 文件
链接 -> 连接目标代码,生成可执行程序

参数:

  • -E 只激活预处理(宏的替换和注释的消除),这个不生成文件,你需要把它重定向到一个输出文件里面.
g++ -E main.cpp > main.i 
  • -c 只做前三步, 不做链接, 生成 .o obj文件
g++ -c main.cpp
  • -S 只做前两步, 生成 .s
g++ -S main.cpp
  • -o 生成链接文件
单个源文件: g++  -o exec main.c
多个源文件: g++ -o exec main.c print.c 
复杂依赖: 写MakeFile文件 然后执行 make 命令
  • -g 只是编译器,在编译的时候,产生调试信息。

  • -ggdb
      此选项将尽可能的生成gdb的可以使用的调试信息.

  • -static
      此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行

  • -fpic或-fPIC
    产生位置无关的目标代码(因为是share),可用于构造共享函数库。

g++ -fPIC -c print.c

print.o 可以用于被创建共享函数库
  • -share
    windows中动态链接库以.dll后缀为标记。动态链接库和净态链接库不同,它里面的函数并不是执行程序的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多的青睐。

    在Linux中同样有动态链接库,它们以.so为后缀,即shared object,共享对象。在Linux下创建动态链接库是件再简单不过的事情,只要在变异函数库员程序时加上-shared选项即可,这样所生成的执行程序即为动态链接库。从某种意义上说,动态链接库也是一种执行程序。按一般规则,程序名应带.so后缀。
    gcc -shared -o dest src
      此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
    共享函数库与静态函数库

gcc -shared -o print.so print.o

gcc -o main_share -lprint -L. print.o
  • -include file
      包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include<filename>
  gcc hello.c -include /root/pianopan.h
  • -Ldir

    将dir目录加到搜寻-l选项指定的函数库文件的目录列表中去,并优先于gcc缺省的搜索目录。在有多个-L选项的情况下,按命令行上-L选项的前后顺序搜索。dir可使用相对路径。如-L../lib等。
    
  • -Idir
      在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他
      回先在你所制定的目录查找,然后再按常规的顺序去找.
      对于#include<file>,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找

  • -I-
      就是取消前一个参数的功能,所以一般在-Idir之后使用

  • -idirafter dir
      在-I的目录里面查找失败,讲到这个目录里面查找.


关于函数库

(http://www.cnblogs.com/avril/archive/2010/05/16/1736524.html)

一个“程序函数库”简单说就是一个文件包含一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其它的程序
使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。

程序函数库可分为三种类型:静态函数库--static libraries,共享函数库--shared libraries,和动态函数库--dynamic loaded libraries。静态函数库是在程序执行前就加入到目标程序中去了;而共享函数库则是在程序启动的时候加载到程序中,它可以被不同的程序共享;动态加载函数库则可以在程序运行的任何时候动态加载。实际上,动态函数库并非另外一种库函数模式,区别是动态函数库是如何被程序元使用的。

Linux系统上的函数库分为两种不同的类型:共享的和静态的

  • 静态函数库

    每次当应用程序和静态连接的函数库一起编译时,任何引用的库函数中的代码都会被直接包含进最终的二进制程序。

  • 共享函数库
    包含每个库函数的单一全局版本,它在所有应用程序之间共享。这一过程背后所涉及的机制相当复杂,但主要依靠的是现代计算机的虚拟内存能力,它允许包含库函数的物理内存安全地在多个独立用户程序之间共享
如何创建共享函数库:

未完

参考:
http://blog.sina.com.cn/s/blog_55a406730100rutb.html
http://www.cnblogs.com/shine-yr/p/5214875.html
http://www.cnblogs.com/avril/archive/2010/05/16/1736524.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容