CC++动态库与静态库的制作与使用-创新互联

静态库的用法

静态库的文件名 libxxx.a -->对应windows的.lib文件做静态库的命令:
C C++ 动态库与静态库的制作与使用

西林网站建设公司创新互联,西林网站设计制作,有大型网站制作公司丰富经验。已为西林超过千家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的西林做网站的公司定做!

使用静态库:
C C++ 动态库与静态库的制作与使用

注意:-L的作用是告诉gcc你的libxxx.a放在了哪个目录里;-l的作用是告诉gcc使用哪个静态库。
举个例子,目录结果如下:
C C++ 动态库与静态库的制作与使用

head.h
C C++ 动态库与静态库的制作与使用

add.c
C C++ 动态库与静态库的制作与使用

sub.c
C C++ 动态库与静态库的制作与使用

mul.c
C C++ 动态库与静态库的制作与使用

步骤1:在src目录执行下面的命令,生产.o文件

C C++ 动态库与静态库的制作与使用

执行后,在src目录下生产了add.o,sub.o,mul.o三个文件

步骤2:在src目录执行下面的命令,生产libCalc.a文件

C C++ 动态库与静态库的制作与使用

在src目录执行下面的命令,把libCalc.a移动到上层的lib文件夹

C C++ 动态库与静态库的制作与使用

执行后,在lib文件夹出现了libCalc.a

main.c
C C++ 动态库与静态库的制作与使用

步骤4:在src的上层目录,执行下面命令生产a.out文件

C C++ 动态库与静态库的制作与使用

  • -I:指定头文件所在的路径
  • -L:指定静态库文件所在的路径
  • -l:指定使用哪个静态库

最后目录结构如下:
C C++ 动态库与静态库的制作与使用

动态库的用法

动态库的文件名 libxxx.so(对应windows的.dll文件) 编译时,需要加【-fPIC】选项。它的作用是,编译出与位置无关的代码。因为动态库在加载到下图的共享库区的时候,不一定加载到哪个位置,所以加了-fPIC后,就记录了每个函数相对于这个动态库头地址的偏移,加载后动态库在内存里的头地址是知道的,又知道了每个函数相对于头的偏移量,自然而然地就能够找到每个函数在内存里的位置了。
C C++ 动态库与静态库的制作与使用

做静态库的命令(-shared):
C C++ 动态库与静态库的制作与使用

用【ldd】命令查看编译出来的可执行文件文件
C C++ 动态库与静态库的制作与使用

结果如下:
C C++ 动态库与静态库的制作与使用
发现【libCalc.so => not found】

解决办法1:

把做好的动态库libCalc.so拷贝到【/lib】或者【/usr/lib】下,也可以用ln做软硬连接:把当前目录下的lib目录下的libCalc.so链接到/lib下
C C++ 动态库与静态库的制作与使用

结果如下:
C C++ 动态库与静态库的制作与使用

发现软连接是红色的,也就是不能使用的意思,错误在于./lib/libCalc.so这个路径是不存在的,原因在于上面的命令使用的是相对路径,改成绝对路径就OK了,命令如下:
C C++ 动态库与静态库的制作与使用

结果如下:
C C++ 动态库与静态库的制作与使用
发现软连接是绿色的了,说明库可以使用了。

再用【ldd】命令查看编译出来的可执行文件文件 ldd a.out, 结果如下:
C C++ 动态库与静态库的制作与使用

但是这种方法不推荐使用。理由是,放在了系统的动态库目录里,容易和别的库重复,发生冲突。

解决办法2:告诉系统,给我加一个动态库的路径,这个是最好的办法。

首先编辑/etc/ld.so.conf文件,添加你自己的库的路径 然后,执行:【sudo ldconfig】,就OK了。

静态库和动态库的特点:

  • 静态库:
    编译的时候,直接把静态库的代码直接编译到目标文件
    执行速度快,不需要在执行的时候加载动态库
    库文件修改后,必须重新编译使用库的代码

  • 动态库
    编译的时候,不把静态库的代码直接编译到目标文件
    执行速度慢,在执行的时候需要加载动态库
    库文件修改后,一般不需要重新编译使用库的代码,只有在库的接口改变时,才需要重新编译使用库的代码。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:CC++动态库与静态库的制作与使用-创新互联
网站URL:http://cdiso.cn/article/dsscid.html

其他资讯