linux操作系统基础命令

来源:互联网 发布:发布订阅模式 java 编辑:程序博客网 时间:2024/06/05 20:23

GCC的知识要点:gcc的初衷是为GNU操作系统专门编写的一款编译器,GNU系统是彻底自由的软件。

gcc的基本用法:

gcc hello world.c -c,只编译,不链接成为可执行文件,编译器只是由输入的.c的源代码文件生成.o为后缀文件的目标文件,通常用于编译不包括主程序的子程序。

gcc hello world.c -o hello world  把hello world.c 编译成可执行文件 hello world 。

-g 是产生调试工具(GDB)所必须的符号资讯,要想对源代码进行调试,我们必须加入这个选项

-O 对程序进行优化编译,链接,采用这个选项,整个源代码会在编译,链接过程中进行优化处理,这样产生的可执行文件的执行效率会提高,但是在编译,链接的速度就相应的要慢一些。


预处理过程:这个过程处理宏定义和include,并做语法检查。

编译过程:这个阶段,生成汇编代码

汇编过程:这个阶段,生成目标代码

链接过程:链接过程,可生成可执行代码。链接分为两种,一种是静态链接,另一种是动态链接。

静态链接的好处是:依赖的动态链接库较少,对动态链接库的版本不会敏感,具有较好的兼容性;缺点是生成的程序比较大。占用内存大。

动态链接的好处是:生成的程序比较小,占用较少的内存。

gcc的使用口令:

gcc -o hello.c生成可执行文件。a.out

.(点)代表当前目录

cp -r /mnt/hgfs/share/gcc/.把gcc复制到当前目录。

time ./hello 测试可执行文件hello执行运算的时间。

gcc -O1 hello.c -o hello1进行一级优化

gcc -O2 hello.c -o hello2进行二级优化


gcc -w hello.c 关闭警告(-w)

gcc -Wall hello.c 开启全部警告(-Wall)

mv add.c ../ 把add.c调到上一级目录


静态库:是在程序执行之前就已经加入到执行文件的执行代码中,成为执行程序的一部分来执行的。后缀是(.a)

动态库:是在程序启动时加载到执行代码中,后缀是(.so)


静态库的优点:编译速度慢,执行速度快,可以提供多种可使用的变量,但是会使程序臃肿占用更多的内存,不利于升级,但是布局好

动态库的优点:编译速度快,执行速度慢,升级方便 布局差。


库的存放:

1:/lib/ 系统库

2:/usr/lib 程序库

不管是静态库还是动态库都是由(.o)后缀的文件生成的。所以先用gcc -c add.c          gcc -c sub.c  生成add.o和sub.o文件 然后创建。

静态库的制作:由ar命令创建 例如:ar rcs libaddsub.a add.o sub.o   就可生成静态库libaddsub.a 

就是 (ar rcs 静态库名 目标文件)。

调用静态库:gcc -o hello hello.c -laddsub编译hello.c就会把静态库整合进hello.c中生成调用静态库的可执行文件 hello

                      gcc hello.c -laddsub生成调用静态库的可执行文件a.out。

通过gcc -o main main.c -L. -laddsub编译

-L指定静函数的位置供找,注意L后面'.',表示静函数在本目找。

-l指定了静函数名,由于静函数的命名方式是lib***.a,其中的lib.a忽略。

根据静函数的特性,此处删libaddsub.amain依然可以运行,因态库的内容已经整合进去了。


动态库(共享库)的制作:gcc -shared -fPIC -o libaddsub.so add.o add.o

就是(gcc -shared -fPIC -o 动态库名 目标文件)

调用动态库:gcc -o out main.c -L. -laddsub 时还不能立即./out,因动态函数使用,会/usr/lib /lib下的动态函数,而此生成的不在里

候有好几方法可以他成功运行:

最直接最简单的方法就是把libaddsub.so拉到/usr/lib /lib中去。


0 0