第二课 GCC入门之静态库以及共享库
序言:
前面一课讲了gcc的简单入门,包括gcc编译步骤:预处理;编译;汇编;链接。今天这节课就来讲下linux的库也欢迎大家吐糟共同学习。
原理:
linux系统中分为2种库:静态库和共享库。静态库是以.a后缀结尾的文件,通常是在编译的链接阶段指定静态库的位置进行编译生成可执行文件,因此生成的可执行文件在执行的时候不需要静态库的参与。动态库共享库是以.so后缀结尾的文件,通常情况下代码中有需要用到共享库的地方在编译链接阶段指定共享库的路径在执行可执行文件的时候从内存表中读取代码,内存中只有一份所有程序共享,所以这个方式是要求共享库必须参与如果运行时找不到是会报错的。这2种库系统都有默认的路径一般都是/usr/lib/和/lib以及/usr/local/lib,这也要看具体的系统版本,也分32位和64位的路径。下面就来具体实践一下。
实践:
建立相关文件步骤如下:
1>建立calc.h文件,并输入如下代码:
#ifndef CALC_H
#define CALC_H double Add(double a,double b); #endif
2>建立calc.c文件,并输入如下代码:
#include <stdio.h>
#include "calc.h" double Add(double a,double b)
{
return a + b;
}
3>建立calcmain.c文件,并输入如下代码:
#include <stdio.h>
#include "calc.h" int main(void)
{
double c = Add(2.0,3.0);
printf("result:%f",c);
return 0;
}
4-1>生成静态库执行,命令如下:
gcc -Wall calc.c -o calc.o
gcc -Wall calcmain.c -o calcmain.o ar rcs libcalc.a calc.o //使用ar命令生成静态库 gcc -Wall calcmain.o libcalc.a -o calc //生成calc可执行文件,
4-2>生成动态共享库执行。命令如下:
//因为之前已经生成了calc.o以及calcmain.o 2个目标文件
gcc -shared -fPIC calc.o -o libcalc.so //使用gcc生成共享库,其中-shared:共享库;-fPIC:与位置无关 gcc -Wall calcmain.o -o calc -L. -lcalc //-L.:当前目录搜索;-l:使用外部lib库。 export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH //指定临时共享库搜索路径,上面的-L.参数经过实验无效不知道为什么,共享库搜索的路径默认是不会搜索当前路径的。
以上是这次实践的相关步骤,其中在gcc编译过程中是可以直接以源码C文件生成目标文件的再次忽略掉了!这一课中静态库知识点相关比较少,现在的开发也比较少用。关于共享库大家可以看看这边博客文章多了解了解。
第二课 GCC入门之静态库以及共享库的更多相关文章
- Linux下库的制作(静态库与共享库)
库中实际上就是已编译好的函数代码,可以被程序直接调用. Linux下的库一般的位置在/lib或者/usr/lib中 静态库 静态库是复制拷贝到调用函数中的,函数运行的时候不再需要静态库,因为静态库是在 ...
- linux下的静态库和共享库
转载&&增加: 我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期 ...
- Linux 静态库与共享库的使用
申明: 正如题如示,本篇讲的是Linux下是静态库与共享库,而Window下的动态链接库详细情况可见这篇文章:windows动态链接库 DLL 浅析.虽然原理,思想差不多,但是细节却各有不同. 一.静 ...
- 【转】Linux 静态库与共享库的使用
原文网址:http://blog.csdn.net/heyabo/article/details/11688517 申明: 正如题如示,本篇讲的是Linux下是静态库与共享库,而Window下的动态链 ...
- gcc创建静态库和共享库
静态库和动态(共享)库静态库:编译程序在编译使用库提供的功能代码的程序时将代码复制到该程序然后编译成可执行程序,这种库成为静态库共享库:共享库比静态库的处理方式更加灵活,因而其产生的可执行文件更小,其 ...
- Linux命令(十二)制作静态库和共享库
1. 静态库 静态库文件命名:libxxxx.a 1.1 步骤: ar rcs libCalc.a *.o 1.2 用nm查看文件内容 1.3 发布并使用 gcc main.c -o mycpp.ou ...
- Linux静态库和共享库
1.什么是静态库静态库类似windows中的静态lib 关于windows中的静态lib,可参考 Windows动态链接库DLL 特点:包含函数代码声明和实现,链接后所有代码都嵌入到宿主程序中. 只在 ...
- Linux静态库和共享库【转】
转自:http://www.cnblogs.com/zlcxbb/p/6806269.html 1.什么是静态库 静态库类似windows中的静态lib 关于windows中的静态lib,可参考 Wi ...
- Qt 静态库与共享库(动态库)共享配置的一个小办法
对于用 QtCreator 编写静态库,动态库,如何能够以最小的改动, 方便的实现两种形式的库文件生成:可以这麽做: 1)使用想到建立静态库 2)在项目配置文件*.pro 中: TARGET = n ...
随机推荐
- Linux网络实时监控配置
Linux监控邮件发送配置 网络状态监控 网络状态:netstat 各个状态的总计,详情:以及重点端口的详细连接情况(22,25,80,3306,8080),打印客户端连接数最多的ip. 邮件报告当前 ...
- java 获取服务器时间同步本地计算机时间
http://hi.baidu.com/captives/item/25c8b80170a9b0ccf45ba6f8 ————————————————————————————————————————— ...
- php ocket通信机制
php 实例说明 socket通信机制 一,socket是什么 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通 ...
- 【PM面试题】如果让你创业,你会选择什么?
答案及理由 我会选择可穿戴设备 ,理由有三: 互联网与硬件的结合是未来的大势所趋,通过硬件来采集数据,而通过互联网或者移动互联网将这些设备连接起来,交换数据,让其形成流动的信息. 未来会从卖产品的阶段 ...
- iframe宽高百分百显示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Revit 2017 编程须要用Visual Studio2015 +.NET Framework 4.52
一年一度的Revit产品公布时刻,我们抢先想各位介绍下Revit 2017的变化和新功能 Major changes and renovations to the Revit API API chan ...
- VSCode调试配置
http://code.visualstudio.com/docs/editor/debugging#_launch-configurations VSCode内置Node.js运行时, 能调试jav ...
- Delphi 中窗口文件与无窗口Pas文件的区别 (MTM)
implementation {$R *.dfm} ---- 带窗口的 dfm -- 一般的 windows 窗口 {$R *.fmx} ---- 带窗口的 fmx -- 一般的 FireMonk ...
- Post And Get接口测试
public class TestPost { public static String do_post(String url, Map<String, String> params) ...
- MySQL 1067
今天在云服务器上装mysql的时候,启动突然报了一个“1067 进程意外终止”的错误,这个错误之前是遇到过的,之前因为my.ini配置basedir路径的时候没有正确配置导致了这个错误,但是今天又出现 ...