C++学习———lib,dll。如何使写好的代码,安全保密的供别人使用?后面有案例链接

项目进展遇到的问题:

如何能够实现将写好的类代码封装起来,只提供头文件给其他人使用。

具体来讲,有些资料这样讲,写一个类,要将类的实现与类的接口分开(也即是将类的声明和定义分开),类的接口放到头文件中,将类的实现放在cpp文件中,这样可以实现隐藏源码的作用,但是在自己做的过程中,想着,这个类你给别人用的话,不仅要提供头文件,源文件cpp一样要给用户,这样同样无法实现代码保密呀?  于是乎,在网上查阅众多资料,有这样一些方法,即将实现成dll或者lib,最后向别人提供即可。

1、何为库?

库是写好的,现有的,成熟的,可以复用的代码。库和可执行文件的区别在于:库不是独立程序,他是向其他程序提供服务的代码。

在日常开发中,其实大部分时间我们都会和第三方库或系统库打交道。在 Android 开发音视频开发领域,一般会用到 FFmepg、OpenCV、OpenGL 等等开源库, 我们一般都会编译成动态库共我们程序使用。

2、何为dll,何为lib,两者的区别?

有两种库,静态库和动态库;静态库和动态库都是为了实现程序共享。(静态库,Linux 下  .a,,win下  .lib)(动态库,linux下 .so,,win下  .dll)

所谓静态库和动态库的区分:表现在:::静态库和动态库就是在链接阶段行为不同。程序执行的过程:预编译->编译->汇编->链接->

静态库(Static library/Static link library):lib包含代码本身,在编译时直接将代码加入到程序当中。在可执行文件中包含了库代码的一份完整拷贝。

因此,存在一个缺点就是会浪费资源空间。另一个问题是静态链接对程序的更新、部署和发布也会带来很多麻烦。比如程序中所使用的mylib.lib是由一个第三方厂商提供的,当该厂商更新容量mylib.lib的时候,那么我们的程序就要拿到最新版的mylib.lib,然后将其重新编译链接后,将新的程序整个发布给用户。这样的做缺点很明显,即一旦程序中有任何模块更新,整个程序就要重新编译链接、发布给用户,用户要重新安装整个程序。

动态库(Dynamic library/Dynamic link library):lib包含了函数所在的dll和dll中函数位置的入口信息。代码由运行时加载在进程空间中的dll提供。vs编译成功后,会生成两个文件.lib文件和.dll文件。

静态库中的lib:包含函数代码本身(包括函数的索引和实现),在编译时直接将代码加入程序当中。

动态库中的lib:包含函数所在的dll文件和文件中函数位置的索引,函数实现的代码由运行时加载到进程空间中的dll提供。

所以:lib是编译时用到的,dll是运行时用到的。如果要完成代码的编译,只需要lib,如果要使动态链接的程序运行起来,只需要dll。

3,使用时应该调用哪些文件?

使用lib需两个文件:
(1).h头文件,包含lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。
(2).LIB文件,
使用dll需注意三个文件:
(1).h头文件,包含dll中说明输出的类或符号原型或数据结构的.h文件。应用程序调用dll时,需要将该文件包含入应用程序的源文件中。
(2).LIB文件,是dll在编译、链接成功之后生成的文件,作用是当其他应用程序调用dll时,需要将该文件引入应用程序,否则产生错误。
(3).dll文件,真正的可执行文件,开发成功后的应用程序在发布时,只需要有.exe文件和.dll文件,并不需要.lib文件和.h头文件。

4,具体案例

。。。。。。。https://blog.csdn.net/JACKSONMHLK/article/details/112882333

猜你喜欢

转载自blog.csdn.net/JACKSONMHLK/article/details/111936325