目录
方法1: 两个窗口去分别模拟两个窗口公司A(客户端),公司B(服务端)的视角案例实现
今天我们来学习将第三方库作为动静态库去链接生成可执行文件的使用方式。
之前我发过一篇关于使用动静态链接生成可执行文件的文章,里面简单的介绍了一下动静态链接的指令实现和动静态库的区别认识,有兴趣的伙伴们可以看看。
Linux——gcc/g++编译器_橙予清的zzz~的博客-CSDN博客https://blog.csdn.net/weixin_69283129/article/details/130820057?spm=1001.2014.3001.5501 有了上面对动静态库基本知识的铺垫,接下来我将详细说明一个问题:当我们在写好一个源.c/cpp文件时,该如何使用第三方库的多种方式。
首先,我先来写两个简单类型的头文件和函数实现,用于测试:
如上,我写了加法和减法的俩个函数实现。
然后我在测试main.c文件中包含了这俩函数的头文件,以便于使用Add和Sub函数。
然后就是对这些.c文件进行汇编链接,生成可执行文件:
执行结果:
如上,这是我们一般情况下自产自销的写出文件后,汇编链接形成可执行文件。但若是在公司企业的话,就不一样了。
举个例子公司A将某某项目外包给了公司B,该公司的程序员只写出了main.c文件,将指定要求的多个函数交给公司B去实现。公司B实现好后,将这些函数的.o文件和.h文件打包给了公司A,公司A的程序员收到后,立即将main.c文件汇编链接公司B的函数实现,完成了项目。
这里有几个问题需要解答一下:
1.函数的生成也是从.c形式开始,一步步进行预处理成为.i文件---->编译成为.s文件---->汇编成为.o重定向二进制目标文件。而我们写的这些.c文件就是经过这三步形成.o类型文件,最终将这些.o文件链接起来生成.exe可执行文件(这是对于Windows系统来说的,因为Windows系统很重视文件的后缀类型,而对于Linux系统来说,文件后缀不重要)。
2.为什么公司B在打包时只给了公司A函数的.o目标文件和.h头文件,却唯独不给函数的.c文件呢?
因为外面做函数的公司不愿给客户源代码!!!对方不想让客户知道方法底层的实现,若是客户知道了底层的实现,就会掌握相应的技术方法和原理,这对做函数的公司来说是得不偿失的!所以只给出.o类型文件有两种原因:
a.是为了增加安全性,因为给客户.o二进制目标文件,客户也无法破译出底层实现的原理,.o文件中全是二进制数据——打开是一堆乱码,没法用!
b.客户只需要将自己的main.c文件生成.o文件,直接将对方提供的.o文件进行链接即可生成可执行文件。
3. .h文件很重要,缺少了.h文件,那些函数就无法使用,也无法生成.o文件。所以我们必须同时拥有.o目标文件和.h头文件才能完成main.c的链接生成.exe文件