文档章节

(一)编写和使用静态及动态链接库

shawn chen
 shawn chen
发布于 2012/08/01 18:39
字数 416
阅读 116
收藏 3

@1 编写和使用静态链接库(archive)

示例1.1:

test.c:
#include <stdio.h>

void func(){
printf("library func\n");
}

test1.c:

#include <stdio.h>

void func1(){
printf("library func1\n");
}

app.c

void main(){
func();
func1();
}

编译test.c ,test1.c, app.c为目标文件:

gcc -c test.c test1.c app.c

打包为静态库:

ar cr ./staticLib/libtest.a test.o test1.o

链接输出到运行目标文件:

gcc -o app app.o -L./staticLib -ltest

@2 编写和使用动态库(shared object)

同样使用示例1.1中的代码作为示例:

gcc -c -fPIC test1.c test.c

然后将test1.o 和test.o 输出为一个动态链接库文件

gcc -shared -fPIC -o ./shareLib/libtest.so test1.o test.o

ok,以上完成后,链接到输出目标:

gcc -o app app.o -L./shareLib -ltest -Wl,-rpath,//home/shawn/workspace/nixExample1/shareLib

-Wl后面的选项为改变运行时ld的选项,可以通过ld --help查看一下,该处是通过rpath选项改变executable
文件app运行时查找动态链接库的路径。

@3 静态链接库和动态链接库的区别

最基本的区别之一是当动态链接库被链接时,最终的可执行文件并不包含动态链接库中的代码。跟windows种的

可能差不多,就是在运行时将动态链接库映射到进程地址空间中,然后修改可执行文件中某个段内的引用的函数的地址。

而静态链接实际上是将使用到的代码静态添加到可执行文件的代码中,这样的话可执行文件当然会比较大。

注: 以上纯属个人的意见,如有问题,请给与修改,谢谢。      

© 著作权归作者所有

shawn chen
粉丝 9
博文 25
码字总数 11754
作品 2
海淀
程序员
私信 提问
linux 中的.so和.a文件

Linux下的.so是基于Linux下的动态链接,其功能和作用类似与windows下.dll文件。 下面是关于.so的介绍: 一、引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的...

YYDroid
2011/10/20
0
0
lib和dll的区别,生成以及使用详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/googler_offer/article/details/88526962 静态库:在链接步骤中,连接器将库文件取得所需的代码,复制到生成的...

googler_offer
03/13
0
0
2014百度校园招聘软件研发类笔试(深圳)

时间:2013年9月28日。 地点:深圳 职位:软件研发 问答题:(10*3) 1.动态链接库(DLL)与静态链接库(lib)的优缺点: 静态链接库和动态链接库都是共享代码的方式,如果采用静态链接库,则无...

SibylY
2013/09/28
128
0
Linux系统中“动态库”和“静态库”那点事儿-【经典好文】

原文链接:http://blog.csdn.net/u010977122/article/details/52958330 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻。在这之前,我们需要了解一下源代码到可执行...

1清风揽月1
2017/06/14
0
0
动态库调用(C++)问题

.dll 该文件不用多说 .lib C++静态编译时需要 否则会编译出错 除非是测试客户端:建立了依赖关系 编译时会自己生成 #pragma comment(lib,"..\Release\DllKmeans.lib") .h 如果没有该文件 需要...

ucliaohh
2016/10/14
13
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部