库文件(动态库和静态库)

1.库文件

通常,我们会在头文件中对类以及函数进行声明,在.cpp源文件中完成具体的实现。

但是这个.cpp文件是对所有人可见的,不具备安全性、保密性,而C/C++提供了一个方法,将这个.cpp源文件编译成一个库文件,是一种可执行代码的二进制形式,可以与其它的源程序一起编译,也可以被操作系统载入内存执行。

这样,在提供一些函数和类的时候,就可以仅仅提供库文件,而非提供.cpp源文件,安全性就得到了保证。

其中,库文件又分为静态库和动态库。

2.静态库

1.简介

静态库是指,主程序文件会和这个库文件一同编译链接生成到.o目标文件中。这样做的好处就是,生成的可执行文件可以独立运行,因为它所需要的函数和类都已经包括在内。

但是如果对静态库的代码进行修改,必须重新生成静态库文件,再重新生成可执行文件。

2.命名方式

命名方式是“libxxx.a”,库名前加”lib”,后缀用”.a”,“xxx”为静态库名。

3.生成静态库

我们将一个.cpp文件变成一个.a静态库文件,用-c选项,只编译,而不链接
例如一个yzz.cpp的源文件,我们可以这么生成它的静态库文件。

g++ -c -o libyzz.a yzz.cpp

4.调用静态库

方式一:直接使用静态库的文件名

g++ -o server server.cpp libyzz.a

方式二:-L指定静态库目录,-l指定静态库名字(不是文件名)
注意,静态库的名字不包含lib前缀也不包含.a后缀

g++ -o server server.cpp -L/home/util -lyzz

要指定多个静态库目录或者静态库文件,需要使用多次-L和多次-l

3.动态库

1.简介

静态库是直接和主程序代码编译链接生成目标文件,那么动态库就不是。动态库是在程序运行的时候,才会被载入

那么动态库的好处就是,如果对动态库的代码进行修改,只需要重新-c选项编译动态库即可,不需要重新编译生成可执行程序

2.命名方式

前缀一样是"lib",后缀是".so",和静态库有一些不同。

3.生成动态库

g++ -fPIC -shared -o libyzz.so yzz.cpp

其中,-shared表示依赖的文件可以是目标文件、汇编文件、.cpp源文件。
而-fPIC,告诉编译器产生与位置无关代码,则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的

4.调用动态库

一共有三种方式,前两种和静态库调用是一致的。

多出来的一种,是Linux系统中采用LD_LIBRARY_PATH环境变量指定动态库文件的目录。
这个我没有详细去了解,可以到Linux静态库与动态库翻到下面动态库的部分去了解。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值