Linux入门学习-gcc编译器与静态动态链接_第五章
来源:互联网 发布:c语言编写最简单的游戏 编辑:程序博客网 时间:2024/05/17 23:01
GCC和G++的区别:
(1)gcc和g++都是GNU(组织)的一个编译器。
(2)后缀名为.c的程序和.cpp的程序g++都会当成是c++的源程序来处理。而gcc不然,gcc会把.c的程序处理成c程序。
(3)对于.cpp的程序,编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。(个人觉得这条是最重要的)
5.1 静态链接库与动态链接库的区别
静态链接库在链接后,被引用的代码讲被复制到最终的可执行文件中,可脱离函数库直接运行。
动态链接库在内存中只包含一份可执行的映像,所有链接到动态链接库的程序都共享这份映像!
5.2 静态链接
bear@bear-K40IE:~/program/sec$ls
add.c add.o first1.c lib src
bear@bear-K40IE:~/program/sec$ar rv libtools.a add.o
ar:creating libtools.a
a– add.o
bear@bear-K40IE:~/program/sec$ls
add.c add.o first1.c lib libtools.a src
bear@bear-K40IE:~/program/sec$vi libtools.a
bear@bear-K40IE:~/program/sec$ls
add.c add.o first1.c lib libtools.a src
bear@bear-K40IE:~/program/sec$vi sub.c
bear@bear-K40IE:~/program/sec$ls
add.c add.o first1.c lib libtools.a src sub.c
bear@bear-K40IE:~/program/sec$gcc -c -O sub.c //-O 优化编译选项
bear@bear-K40IE:~/program/sec$ls
add.c add.o first1.c lib libtools.a src sub.c sub.o
bear@bear-K40IE:~/program/sec$ar rv libtools.a sub.o //创建静态链接库,并将sub.o链接文件加入静态链接库中
a- sub.o
bear@bear-K40IE:~/program/sec$mv libtools.a ./lib
bear@bear-K40IE:~/program/sec/lib$vi my.h
bear@bear-K40IE:~/program/sec/lib$ls
libtools.a my.h
bear@bear-K40IE:~/program/sec$vi first1.c
bear@bear-K40IE:~/program/sec$gcc -c -I./ first1.c
bear@bear-K40IE:~/program/sec$ls
add.c add.o first1.c first1.o lib my.h src sub.c sub.o
bear@bear-K40IE:~/program/sec$gcc -c first1.c //编译first1.c文件生成first1.o的链接文件
ear@bear-K40IE:~/program/sec$gcc first1.o -L./lib -ltools -o first1 //链接firsr1.o文件至静态链接库libtools
bear@bear-K40IE:~/program/sec$ls
add.c add.o first1 first1.c first1.o lib my.h src sub.c sub.o
bear@bear-K40IE:~/program/sec$./first1
VALUE+10=110
VALUE-10=90
这是add.c文件:
#include<stdio.h>
intadd(int a,int b)
{
return a+b;
}
这是sub.c文件:
#include<stdio.h>
intsub(int a,int b)
{
return a-b;
}
这是first1.c文件:
#include<stdio.h>
#include"my.h"
main()
{
fprintf(stderr,"VALUE+10=%d\n",add(VALUE ,10));
fprintf(stderr,"VALUE-10=%d\n",sub(VALUE ,10));
}
5.3 动态链接
bear@bear-K40IE:~/program/third$vi first.c
bear@bear-K40IE:~/program/third$gcc -fPIC -c first.c //first.c返回的是乘法值
bear@bear-K40IE:~/program/third$ls
first.c first.o
bear@bear-K40IE:~/program/third$file first.o
first.o:ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), notstripped
bear@bear-K40IE:~/program/third$gcc -shared -o libabc.so first.o //添加动态链接库libabc.so,并将first.o链接文件加入其中
bear@bear-K40IE:~/program/third$ls
first.c first.o libabc.so
bear@bear-K40IE:~/program/third$vi sb.c
bear@bear-K40IE:~/program/third$ls
first.c first.o libabc.so sb.c
bear@bear-K40IE:~/program/third$gcc -c sb.c -O
bear@bear-K40IE:~/program/third$ls
first.c first.o libabc.so sb.c sb.o
bear@bear-K40IE:~/program/third$echo $LD_LIBRARY_PATH
bear@bear-K40IE:~/program/third$export LD_LIBRARY_PATH=./
bear@bear-K40IE:~/program/third$echo $LD_LIBRARY_PATH
./
bear@bear-K40IE:~/program/third$gcc sb.o -L./ -labc -s -o sb
bear@bear-K40IE:~/program/third$ls
first.c first.o libabc.so sb sb.c sb.o
bear@bear-K40IE:~/program/third$./sb
240is the result
这是first.c文件:
#include<stdio.h>
intfx(int a,int b)
{
return a*b;
}
这是sb.c文件:
#include<stdio.h>
main()
{
fprintf(stderr,"%d is theresult \n",fx(10,24));
}
- Linux入门学习-gcc编译器与静态动态链接_第五章
- 服务端入门《三》(gcc 链接 静态库与动态库)
- gcc 动态链接与静态链接
- gcc 动态链接与静态链接
- GCC静态链接与动态链接
- Linux下gcc编译器生成和使用静态库和动态库学习笔记
- Linux下gcc编译器生成和使用静态库和动态库学习笔记
- 学习 gcc编译器使用3 生成动态链接
- gcc静态链接与动态链接,gdb test,$^依赖$@目标$<
- linux C编程入门之静态链接库、动态链接库的编译与链接
- 编译器链接过程 静态链接 动态链接
- 20170725Linux下Makefile之三_动态链接库与静态链接库
- Linux GCC编译使用动态、静态链接库
- Linux GCC编译使用动态、静态链接库
- Linux GCC编译和使用动态、静态链接库
- Linux GCC编译使用动态、静态链接库
- gcc g++ Linux下动态库_静态库
- gcc g++ Linux下动态库_静态库
- 花钱也时兴!十种“将来支付”已成事实
- Java----反射
- 一位ACMer过来人的心得
- 十三、BluetoothChat之BluetoothChat.java
- javascript 函数
- Linux入门学习-gcc编译器与静态动态链接_第五章
- 什么是EIP、ESP、EBP
- autoconf用到的工具介绍
- 十五、BluetoothChat之BluetoothChatService.java
- RDO Install openstack on CentOS6.3
- 十四、bluetoothChat之扫描设备DeviceListActivity.java
- 通过 GetFileVersionInfo 获取EXE 或 DLL的各种资源 .
- sqlserver增加删除外键
- 进程和线程的区别