第二课 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 ...
随机推荐
- 网络协议之ts---ts 流分析详解
名词缩写翻译: es:elements stream 基本流 pes:packet elements stream 打包流 pts:presentation time stamp 显示时间戳 dts: ...
- log4j详解(转)
转载自:http://blog.csdn.net/evatian/article/details/8501517 Log4j – 如何配置多个logger? 分类: java2013-01-14 16 ...
- express搭建权限管理系统
express搭建权限管理系统 权限管理,是管理系统中的常见组件.通常需要定义资源,把资源调配给用户,通过判断用户是否有权限增删改查来实现. 初衷: 使用express开发过的项目大大小小加在一起也有 ...
- MYSQL批量插入数据库实现语句性能分析【转】 批量插入!程序里面对于数据库插入的功能尽量用【异步处理+批量插入+(事务)】
假定我们的表结构如下 代码如下 CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VA ...
- knowledgeroot 的配置与优化
首先下载 KnowledgeRoot 的安装包,就是一个压缩文件,解压缩后放到 WebRoot 下面 在浏览器中打开网站,自动提示进行安装,安装的过程很简单,安装结束后即可以使用. 安装包创建的数据库 ...
- EditText ------- 键盘类型
文本输入框指定软键盘类型和软键盘回车键图标设置, 转载:http://blog.csdn.net/wirelessqa/article/details/8567327
- 图片和byte[]数组互转
一.图片转成byte[]数组. import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io ...
- boost::archive::binary_iarchive
#include <iostream> #include <string> #include <sstream> #include <vector> # ...
- 第二只Python爬虫
同样参照网上教程,同时把会的不多的html标签又复习了一下 同时安利一个网站,我唯一加入过的一个社团官网(web开发协会 www.nutjs.com 前任会长是属于大牛级的存在,目前网站已多次重构,花 ...
- 【BZOJ3261】最大异或和 Trie树+贪心
[BZOJ3261]最大异或和 Description 给定一个非负整数序列 {a},初始长度为 N. 有 M个操作,有以下两种操作类型:1 .A x:添加操作,表示在序列末尾添加一个 ...