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

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

前言

(1)想象一下,假如我们幸幸苦苦写了一个封装库代码,为了建立护城河,我们企业不愿意把真实的代码提供给用户。怕客户拿了代码,这个合同结束,稍微改一点点,就盗用我们的技术,然后说全自主创新。那真是有苦说不出啊。

(2)但是呢?你不把自己的代码给客户,客户用不了,还有是要你来用,最终整个项目你们包了。那这个所谓的客户躺着赚钱,你们又太亏了,而且根本不现实。

(3)所以,为了保护自己的知识产权,又能够把客户服务的服服帖帖的。我们可以自己建立一个静态库。

x86平台下建立静态库

准备测试程序

静态库程序

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

#include <stdio.h>
void mylib(void)
{
        printf("This is mylib!\r\n");
}


测试程序

(1)这里是测试程序,有一个函数声明void mylib(void)。

(2)这个函数声明也可也放在一个头文件里面,然后这个c文件包含那个头文件。

(3)不明白的同学说明对于**#include**这个头文件包含理解不够,可以看看深入理解C程序的#include和头文件,让c工程只有.h文件(狗头)

void mylib(void);
int main(void)
{
        mylib();
        return 0;
}


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

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

gcc -c libtest.c

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

(1)这里我们使用ar指令,将.o文件变成静态库

(2) 注意:规定静态库必须以lib开头,.a结尾。这是规定!

ar cr libmylib.a libmylib.o

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

(1)这里我们使用ar指令,将.o文件变成静态库

(2)这里需要注意,-o表示输出的最终可执行文件名字。可不写,那么最终生成的可执行文件和c文件名字一致。

(3)-lmylib表示静态库的名字。libmylib.a是库文件名,去掉lib开头,.a结尾的mylib才是真正的库名。因此 -l+库名。

(4)-L用于指定静态库路径,最后的 '.'表示静态库在当前路径下。


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

arm平台下建立静态库

确定交叉编译器


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

(2)所以需要执行如下命令

vim ~/.bashrc


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

/CROSS_COMPILE

建立静态库

(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)建立静态库可以很好的保护自己的代码隐私性,又能够让别人使用。但是为什么C库函数需要建立成静态库?

(2)我们有没有发现一个问题,假如我们想要看一个C库函数底层实现,很多时候是直接跳转到了一个头文件中,底层实现是看不到的。

(3)这是因为C库已经被编译成为了静态库,我们上面说静态库可以保护自己代码的隐私性,但是C库不是开源的吗?

(4)这个就要涉及静态库的第二个好处,提供编译效率。

(5)静态库的代码已经经历了预处理,编译,汇编的过程,只差最后的链接了。如果别人要使用C库,就可以直接进行最后一步进行链接操作,有效的提高编译效率。


目录
相关文章
|
4月前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
959 3
|
18天前
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器架构有啥区别?X86计算、Arm、GPU异构、裸金属和高性能计算对比
阿里云ECS涵盖x86、ARM、GPU/FPGA/ASIC、弹性裸金属及高性能计算等多种架构。x86架构采用Intel/AMD处理器,适用于广泛企业级应用;ARM架构低功耗,适合容器与微服务;GPU/FPGA/ASIC专为AI、图形处理设计;弹性裸金属提供物理机性能;高性能计算则针对大规模并行计算优化。
|
2月前
|
Docker 容器
docker:记录如何在x86架构上构造和使用arm架构的镜像
为了实现国产化适配,需将原x86平台上的Docker镜像转换为适用于ARM平台的镜像。本文介绍了如何配置Docker buildx环境,包括检查Docker版本、安装buildx插件、启用实验性功能及构建多平台镜像的具体步骤。通过这些操作,可以在x86平台上成功构建并运行ARM64镜像,实现跨平台的应用部署。
1403 2
|
2月前
|
机器学习/深度学习 弹性计算 编解码
阿里云服务器计算架构X86/ARM/GPU/FPGA/ASIC/裸金属/超级计算集群有啥区别?
阿里云服务器ECS提供了多种计算架构,包括X86、ARM、GPU/FPGA/ASIC、弹性裸金属服务器及超级计算集群。X86架构常见且通用,适合大多数应用场景;ARM架构具备低功耗优势,适用于长期运行环境;GPU/FPGA/ASIC则针对深度学习、科学计算、视频处理等高性能需求;弹性裸金属服务器与超级计算集群则分别提供物理机级别的性能和高速RDMA互联,满足高性能计算和大规模训练需求。
|
2月前
|
编解码 弹性计算 应用服务中间件
阿里云服务器Arm计算架构解析:Arm计算架构云服务器租用收费标准价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中Arm计算架构以其低功耗、高效率的特点受到广泛关注。本文将深入解析阿里云Arm计算架构云服务器的技术特点、适用场景以及包年包月与按量付费的收费标准与最新活动价格情况,以供选择参考。
|
2月前
|
存储 Docker 容器
ARM架构鲲鹏主机BClinux离线安装docker步骤
下载并安装适用于ARM架构的Docker CE二进制文件,解压后移动至/usr/bin目录。创建docker组,配置systemd服务脚本(docker.service、docker.socket、containerd.service),重载systemd配置,启动并启用docker服务。编辑daemon.json配置存储驱动、镜像加速地址等,最后拉取所需镜像。
59 0
|
2月前
|
NoSQL MongoDB Docker
求助,有没有大神可以找到arm64架构下mongodb的3.6.8版本的docker镜像?
在Docker Hub受限的情况下,寻求适用于ARM架构的docker镜像资源或拉取链接,以便在x86架构上获取;内网中的机器为ARM架构,因此优先请求适合ARM的Docker镜像或Dockerfile,非常感激您的帮助。
|
4月前
|
机器学习/深度学习 算法 数据库
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
在我们选择阿里云服务器的架构时,选择合适的云服务器架构对于提升业务效率、保障业务稳定至关重要。阿里云提供了多样化的云服务器架构选择,包括X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等。本文将深入解析这些架构的特点、优势及适用场景,以供参考和选择。
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
|
4月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
134 3
|
3月前
ARM64架构提供的Cache操作
ARM64架构提供的Cache操作