#include < >与#include " "

#include < >:直接到系统指定的目录中去找头文件。

#include " " :先在源文件所在文件夹寻找,再到系统指定的目录中去找头文件。

gcc 常用命令

GCC是GNU C Compiler 的简写,GCC现在已经支持多种语言的编译,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。

//test.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}

最基本的gcc命令如下:

gcc test.c -o test

根据test.c文件生产可执行文件test。其实从.c文件到可执行文件会经历四步:预编译(Preprocessing),编译(Compilation),汇编(Assembly),链接(Linking)。

预编译

gcc -E test.c -o test.i 或 gcc -E test.c

得到汇编代码

gcc -S test.i -o test.s

得到目标文件

gcc -c test.s -o test.o

链接

gcc test.o -o test

多个文件的编译

gcc test1.c test2.c -o test

gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test

第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

优化选项 -O

gcc -O1 test.c -o test

使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

检错

输出所有警告信息:

gcc -Wall test.c -o test

在所有产生警告的地方停止编译:

gcc -Werror test.c -o test

查看二进制文件相关命令

查看文件类型:

file

查看二进制文件链接到哪些库

ldd

查看二进制文件里面所包含的symbol,T表示加载,U表示undefined symbol

nm(选项)(参数)

选项:

-A:每个符号前显示文件名;
-D:显示动态符号;
-g:仅显示外部符号;
-r:反序显示符号表。

参数:

目标文件:二进制目标文件,通常是库文件和可执行文件。

读二进制文件里面的信息

readelf -a smu.o

将二进制文件转换为汇编

objdump -d sum.o

制作动态链接库

编写想要制作库的.h和.c文件

/*mylib.h*/
void lib_test();
/*mylib.c*/
#include "mylib.h"
#include <stdio.h>
void lib_test()
{
printf("This is a dynamic link library!\n");
}

输入命令:

gcc -shared -fPIC mylib.c -o libmylib.so

生产动态链接库libmylib.so文件。

接下来要就要使用动态链接库了。

编写:

#include "mylib.h"
int main()
{
lib_test();
}

输入命令:

gcc main.c -o main -L. -lmylib -Wl,-rpath,***         #***是动态链接库的路径

执行

./main

输出为:

This is a dynamic link library!

至此成功使用动态链接库。

参考:

Linux GCC常用命令

gcc指定头文件路径及动态链接库路径

Linux中动态链接库总结

linux 下动态链接实现原理

gcc 相关总结 动态链接库的更多相关文章

  1. [转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

    来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有 ...

  2. 【转】GCC编译使用动态链接库

    相关gcc参数:-l -L -shared -fPIC -static -c -o   原文地址:[脚本之家]http://www.jb51.net/article/34990.htm     根据链 ...

  3. GCC 编译使用动态链接库和静态链接库的方法

    1 库的分类 依据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的.所以生成的可执行文件就不受库的影响了.即使库被删除了,程序依旧能够成功执行. 有别于静态库,动态库的链接是在程 ...

  4. Linux下GCC相关知识点

    摘要: 总结GCC的具体使用,动态库静态库的相关问题 参考资料: <Linux网络编程> ISBN:9787302207177 p19 1 GCC简介 GCC是Linux下的编译工具集,是 ...

  5. 利用GCC编译器生成动态链接库和静态链接库

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码. ...

  6. GCC 编译使用动态链接库和静态链接库

    1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有 ...

  7. GCC相关的环境变量

    介绍GCC在编译阶段和程序运行阶段用到的环境变量. GCC编译时用到的环境变量 GCC编译时用到的变量. C_INCLUDE_PATH GCC编译时查找头文件的目录列表.比如: echo $C_INC ...

  8. 【转】gcc 编译使用动态链接库和静态链接库

    1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有 ...

  9. gcc相关

    linux操作系统上面开发程序, 光有了gcc 是不行的 它还需要一个   build-essential软件包作用是提供编译程序必须软件包的列表信息 也就是说 编译程序有了这个软件包它才知道 头文件 ...

随机推荐

  1. spring之为什么要使用事务?

    问题描述:现在我们有一个数据库:spring 三张表:account.book.book_stock account存储着用户以及账户余额.book存储着书号.名字和 购买一本所需金额.book_st ...

  2. placeHolder和defaultValue的区别

    placeHolder和defaultValue的区别 (1)placeHolder用于提示用户,它不与后端进行交互. (2)defaultValue则是与后端交互时的默认值. 举例说明:在Selec ...

  3. Numpy常用方法及应用总汇

    目录 Numpy 1.基本操作 1.1数组转换 1.2数组生成 1.3文件读取 1.4查看操作 2.数据类型 2.1指定数据类型: 2.2查看数据类型 2.3数据类型转换 3.数组运算 3.1数组间运 ...

  4. oop(面向对象语言的三大特征):封装,继承,多态; (抽象),函数绑定

    封装/隐藏 : 通过类的访问限定符实现的   private    public 继承的意义之一:代码的复用 类的继承是指在一个现有类的基础上去构建一个新的类,构造出来的新类被称为派生类(子类),现有 ...

  5. vue报错 [Intervention] Ignored attempt to cancel a touchmove event with cancelable

    在vue开发中使用vue-awesome-swiper制作轮播图,手动拖动时会报错,解决方案: 需要滑动的标签 { touch-action: none; } -------------------- ...

  6. Scala实践5

    一.Scala的层级 1.1类层级 Scala中,Any是所其他类的超类,在底端定义了一些有趣的类NULL和Nothing,是所有其他类的子类. 根类Any有两个子类:AnyVal和AnyRef.其中 ...

  7. vPlayer 模块Demo

    本文出自APICloud官方论坛 vPlayer iOS封装了AVPlayer视频播放功能(支持音频播放).iOS 平台上支持的视频文件格式有:WMV,AVI,MKV,RMVB,RM,XVID,MP4 ...

  8. Elasticsearch系列---实战零停机重建索引

    前言 我们使用Elasticsearch索引文档时,最理想的情况是文档JSON结构是确定的,数据源源不断地灌进来即可,但实际情况中,没人能够阻拦需求的变更,在项目的某个版本,可能会对原有的文档结构造成 ...

  9. 【Tool】---SVN的超级简单并具体得使用介绍

    又一次被打脸,笔者表示再也不相信自己的记性了.简单的SVN隔了一段时间后,由于项目的需要要重新简历代码库,竟然一下子又忘了.天那,这就好比战士上了战场发现没带枪,这能行吗?因此,趁着今天又简短的复习了 ...

  10. CF - 一直交换元素的规律

    Dima is a beginner programmer. During his working process, he regularly has to repeat the following ...