首页 > 静态链接库与动态链接库 (二)动态链接库的编译与使用

静态链接库与动态链接库 (二)动态链接库的编译与使用

上一篇文章里大概描述linux下静态链接库的编译与使用,下面讲动态链接库的编译与使用方法。

1. 什么是动态链接库

    所谓动态链接库,是指编译的时候不会把程序引用到的库插入到执行程序里,而是在执行时候才会去加载相关的库,所有用到此库的程序可以共享一份代码。

    这样带来的好处是可执行程序所占的空间变小了,同时,如果库需要升级,你并不需要重新编译你的程序,只要把相关的库升级即可。

2. 动态链接库的编译与使用方法

    使用和上一篇文章相同的代码:main.c  sum.c  sum.h  

    在 linux 下动态链接库文件一般是这样的名字: libxxx.so

复制代码lv@lenovo: $ ls
main.c    sum.c    sum.h
lv@lenovo: $ 
lv@lenovo: $ gcc -c -fPIC sum.c                    ##  -fIPC告诉编译器将源代码编译成共享的object文件,PIC(Position-Independent Code)意思是非位置依赖性代码
lv@lenovo: $ ls
main.c    sum.c    sum.h    sum.o
lv@lenovo: $ gcc -shared -fPIC -o libsum.so sum.o  ##  生成动态链接库文件libsum.so
lv@lenovo: $ ls
libsum.so    main.c        sum.c        sum.h        sum.o
lv@lenovo: $ 
lv@lenovo: $ gcc -o sumappd main.c -L . -lsum      ##  生成可执行程序
lv@lenovo: $ ls
libsum.so    sum.c        sum.o
main.c        sum.h        sumappd
lv@lenovo: $ ./sumappd                             ##  运行生成结果
Num1 + Num2 = 3

      结论: 编译时”-lsum“的方式,是不能够区分当前是静态链接还是动态链接的。

                 如果在同一个目录下同时有静态链接库和动态链接库,则系统默认会引用动态链接库,如果想使用静态链接库则需要在编译时加上”-static“参数。

   

     (注:若使用C++编写,编译的时候将 gcc 改用 g++ 即可)

转载于:https://www.cnblogs.com/lvchaoshun/p/5966788.html

更多相关:

  • 今天,小编给大家带来的教程为:前嗅ForeSpider脚本教程中,链接抽取的应用场景,以及链接在源码的html标签里写脚本的实战教程。具体内容如下:一.应用场景当需要手动添加链接时,可添加链接脚本。在“链接脚本处”,可能用到的类为extractor 、result、url、grabDoc、dom。二.链接在源码的html标签里链接地址...

  • 问题 项目中需要链接多个静态库,在编译的时候报错如下 sdi_io.cpp:(.text._ZN13sdi_H264EncIO7DataPopEPm+0x30):对‘H264ENC_StatusGet(H264ENC_Status_t&)’未定义的引用 可能原因是符号确实没有定义,而本文出现这个问题的原因是,链接的静态库有前后...

  • 人们总喜欢在帖子中加上各种有用的URL链接或Email地址。而笔者当初设计时没有考虑到这一点,使得这些URL链接或Email地址只能以文字的形式而并不是以超链接的形式显示,其它浏览帖子的人还必须把这些URL链接拷贝到浏览器中或把Email地址拷贝到Outlook中才能转到相应的链接地址或发送电子邮件到相应的Email地址。   发现这...

  • iPhone上的Safari(还有些webkit android手机浏览器)会自动对看起来像是电话号码的数字串(包括已经加入连字符或括号格式化过的)添加电话链接,点击之后会询问用户是否想要拨打该号码。如果你不希望开启这个自动识别,可以将它关闭:

    -->