当前位置:   article > 正文

如何保护自己知识产权,建立代码护城河——建立自己的静态库,x86和arm平台的实例讲解_静态库区分平台吗

静态库区分平台吗

前言

(1)想象一下,假如我们幸幸苦苦写了一个封装库代码,为了建立护城河,我们企业不愿意把真实的代码提供给用户。怕客户拿了代码,这个合同结束,稍微改一点点,就盗用我们的技术,然后说全自主创新。那真是有苦说不出啊。
(2)但是呢?你不把自己的代码给客户,客户用不了,还有是要你来用,最终整个项目你们包了。那这个所谓的客户躺着赚钱,你们又太亏了,而且根本不现实。
(3)所以,为了保护自己的知识产权,又能够把客户服务的服服帖帖的。我们可以自己建立一个静态库

x86平台下建立静态库

准备测试程序

静态库程序

这里是我准备的静态库程序,只有一句打印。

#include <stdio.h>

void mylib(void)
{
        printf("This is mylib!\r\n");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

测试程序

(1)这里是测试程序,有一个函数声明void mylib(void)。
(2)这个函数声明也可也放在一个头文件里面,然后这个c文件包含那个头文件。
(3)不明白的同学说明对于**#include**这个头文件包含理解不够,可以看看深入理解C程序的#include和头文件,让c工程只有.h文件(狗头)

void mylib(void);

int main(void)
{
        mylib();
        return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(1)将C文件变成o文件

(1)我们先让c文件变成01语言,到最后一步链接停止。

gcc -c libtest.c
  • 1

(2)将o文件变成静态库

(1)这里我们使用ar指令,将.o文件变成静态库
(2) 注意:规定静态库必须以lib开头,.a结尾。这是规定!

ar cr libmylib.a libmylib.o
  • 1

(3)将测试程序与静态库链接

(1)这里我们使用ar指令,将.o文件变成静态库
(2)这里需要注意,-o表示输出的最终可执行文件名字。可不写,那么最终生成的可执行文件和c文件名字一致。
(3)-lmylib表示静态库的名字。libmylib.a是库文件名,去掉lib开头,.a结尾的mylib才是真正的库名。因此 -l+库名。
(4)-L用于指定静态库路径,最后的 '.'表示静态库在当前路径下。

gcc -o test test.c -lmylib -L .
  • 1

arm平台下建立静态库

确定交叉编译器

(1)首先你需要知道你使用的是什么交叉编译器工具。有一些人可能是按照教程来的,已经在.bashrc文件中设置了交叉编译工具链。
(2)所以需要执行如下命令

vim ~/.bashrc
  • 1

(3)在此文件中,输入如下指令,即可找到自己的交叉编译工具链是什么。

/CROSS_COMPILE
  • 1

在这里插入图片描述

建立静态库

(1)测试程序和上面一致,执行流程也一样。只不过执行gcc和ar指令之前,需要加上交叉编译工具链。

arm-buildroot-linux-gnueabihf-gcc -c libtest.c  //将C文件变成o文件
arm-buildroot-linux-gnueabihf-ar cr libmylib.a libmylib.o  //将o文件变成静态库
arm-buildroot-linux-gnueabihf-gcc -o test test.c -lmylib -L . //将测试程序与静态库链接
  • 1
  • 2
  • 3

建立静态库有什么好处

(1)建立静态库可以很好的保护自己的代码隐私性,又能够让别人使用。但是为什么C库函数需要建立成静态库?
(2)我们有没有发现一个问题,假如我们想要看一个C库函数底层实现,很多时候是直接跳转到了一个头文件中,底层实现是看不到的。
(3)这是因为C库已经被编译成为了静态库,我们上面说静态库可以保护自己代码的隐私性,但是C库不是开源的吗?
(4)这个就要涉及静态库的第二个好处,提供编译效率。
(5)静态库的代码已经经历了预处理,编译,汇编的过程,只差最后的链接了。如果别人要使用C库,就可以直接进行最后一步进行链接操作,有效的提高编译效率。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/281207
推荐阅读
相关标签
  

闽ICP备14008679号