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

2023-11-02

前言

(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库,就可以直接进行最后一步进行链接操作,有效的提高编译效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 【linux】常用shell指令 [不断补充中...]

    前言 shell是一种脚本语言 需要有编译器执行 即 应用程序 gt shell gt 操作系统 gt 硬件 bash是linux下默认的shell sh是unix下默认的shell 多命令执行 xx xx 前面执行成功才会执行后面的命令
  • 【ARM】Linux内核驱动之中断

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https gitee com stylle linux code 点赞 收藏 再看 养成习惯 订阅的粉丝可通过PC端文末加我微信 可对文章的内容进
  • 交叉编译工具链(arm-linux-gcc)使用测试

    在使用之前 需要先安装交叉编译工具链 arm linux gcc 这里仅提供一个参考链接 不作叙述 参考链接 1条消息 Ubuntu 18 04安装arm linux gcc交叉编译器 超简单 附安装包下载地址 安装交叉编译器 难搞哦 的博
  • arm汇编指令详细整理及实例详解

    目录 一 简介 二 ARM 汇编指令说明 2 1 32位数据操作指令 2 2 32位存储器数据传送指令 2 3 32位转移指令 2 4 其它32位指令 三 实例讲解 3 1 MRS 3 2 MSR 3 3 PRIMASK 3 4 FAULT
  • ARM——体系架构

    1 ARM简介 ARM是Advanced RISC Machines的缩写 它是一家微处理器行业的知名企业 该企业设计了大量高性能 廉价 耗能低的RISC 精简指令集 处理器 公司的特点是只设计芯片 而不生产 它将技术授权给世界上许多著名的
  • RK3568资料汇总

    文档资料 野火 https doc embedfire com products link zh latest linux ebf lubancat html 正点原子 http 47 111 11 73 docs boards arm l
  • 必看:主线剧情系列的循序渐进的查看顺序

    必看 主线剧情 系列 的循序渐进的查看顺序 主线剧情 Linux 系列 为嵌入式 Linux 的学习记录 仓库地址 Github Gitee 一开始可以鸟瞰一下 ARM 系列处理器的当前局面 主线剧情 番外01 ARM系列快速鸟瞰 首先是基
  • Zynq7000硬件开发之芯片供电电源功耗(电流)评估

    案头语 单板硬件的主控芯片集成度越来越高 多核处理器越来越多 一块单板可能只需要1块芯片就能满足整体需求 一方面减少设计复杂度 另一面节省PCB面积成本 能同时掌握硬件原理设计以及PCB Layout设计逐渐成为主流 本系列文章同时包含有两
  • Linux部署宝塔

    1 linux服务器安装宝塔 宝塔地址 https www bt cn new download html 点击上方地址 进入下方页面 点击安装版本 复制第一个命令 得确认你服务器是centos 远程连接服务器 复制此命令运行 运行成功后
  • RTOS专栏(一) —— rt-thread简单介绍和qemu使用

    本期主题 简单介绍rt thread 介绍qemu和rt thread怎么配合使用 qemu的简单例子 rt thread qemu 1 rt thread介绍 2 qemu介绍 3 搭建rt thread和qemu开发环境 4 简单例子
  • linux入门系列18--Web服务之Apache服务2

    接上一篇文章 在了解Apache基本配置以及SELinux相关知识后 继续演示Apache提供的虚拟主机功能以及访问控制方式 如果还没看上一篇的建议先查看后再来 上篇文章 linux入门系列18 web服务之apache服务1 三 Apac
  • centos 安装java11

    直接执行 yum list grep java 11 输出结果如下 java 11 openjdk i686 1 11 0 16 0 8 1 el7 9 updates java 11 openjdk x86 64 1 11 0 16 0
  • SoC性能指标&ARM内核运算能力

    自动驾驶芯片常用的性能评价指标 TOPS DMIPS GFLOPS分别说的是啥 TOPS Tera Operation Per Second 表示每秒钟可以进行的操作数量 用于衡量自动驾驶的算力 众所周知 汽车上最常用的传感器是摄像头 而与
  • linux文件权限说明(drwxr-xr-x)

    在linux中查看文件的时候 在每一行的最前面会有这样的一串字符 drwxr x 如下面的样例 drwxr x 2 root root 37 Apr 18 10 50 data rw r r 1 root root 68549 Sep 26
  • 【电赛-软件】CCS安装教程

    CCS安装教程 下载 下载地址 下载地址 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img WhFWuuUy 1679146802762 ccspicture ccs download png 选择第二个CCSTU
  • 【FMC141】基于VITA57.4标准的4通道2.8GSPS 16位DA播放子卡(2片DAC39J84)

    FMC141是一款基于VITA57 4标准的4通道2 8GSPS 2 5GSPS 1 6GSPS采样率16位DA播放FMC子卡 该板卡为FMC 标准 符合VITA57 4与VITA57 1规范 16通道的JESD204B接口通过FMC 连接
  • lv12 uboot移植深化 9

    u boot 2013 0 1移植 实验目的 了解 u boot 的代码结构及移植 的基本 方法 实验环境 u buntu 14 04
  • lv12 uboot源码配置编译 8

    目录 1 uboot源码获取 2 uboot特定 3 uboot源码结构 3 1 平台相关代码 3 1 1 arch 3 1 2 board 3 2 平台无关代码 3 2 1 common下放的都是uboot的命令 3 3 配置文件 帮助文
  • linux使用文件描述符0、1和2来处理输入和输出

    文件描述符012 在Linux中 文件描述符0 1和2分别代表标准输入 stdin 标准输出 stdout 和标准错误 stderr 它们用于处理进程的输入和输出 文件描述符0 stdin 文件描述符0是进程的标准输入 通常用于读取用户的输
  • linux ARM64 处理器内存屏障

    一 内存类型 ARMv8架构将系统中所有的内存 按照它们的特性 划分成两种 即普通内存和设备内存 并且它们是互斥的 也就是说系统中的某段内存要么是普通内存 要么是设备内存 不能都是 1 普通内存 Normal Memory 普通内存的特性是

随机推荐

  • 在Linux服务器上下载并安装Nginx

    在Linux服务器上下载并安装Nginx 下载安装包 进入官网 http nginx org en download html 下载稳定版 进入usr下的local文件夹 cd usr local 在user下的local中创建nginx文
  • 【毕业设计】基于单片机的心率血氧健康监测手表 - 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 4 1 硬件准备 4 2 传感器和算法 5 部分核心代码 5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到
  • How to debug release mode program in visual studio

    一般情况下 因为release模式的需求 在release模式下的程序是没有debug符号信息的 但是我们可以通过修改Visual studio中的选项来enable release模式的程序的debug 右键项目 选择属性 关闭如下优化选
  • kolla 部署 openstack v1.0

    准备 hosts配置 cat lt lt EOF gt gt etc hosts 192 168 179 90 kolla ansible controller 192 168 179 91 kolla ansible compute EO
  • 2023国赛数学建模B题思路分析 - 多波束测线问题

    1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术 声波在均匀介质中作匀 速直线传播 在不同界面上产生反射 利用这一原理 从测量船换能器垂直向海底发射声波信 号 并记录从声波发射到信号接收的传播时间
  • ItelliJIDEA安装与破解

    IntelliJ IDEA下载地址 官网下载 http www jetbrains com idea IntelliJ IDEA安装教程就不赘述了 百度一下就有 下面主要讲IntelliJ IDEA破解步骤 1 下载补丁 下载地址 http
  • 傅里叶变换的实质--正交之美

    引 最近在搞一个音频解码器 将随意录制好的声音按照不同的频率分离出不同的音频流 然后推到不同的音箱中 如果再考虑一下音场的谐性 那就是一个N 1声道的解码系统了 我只是想在女儿 或者儿子 出生之前为她做点事情 以便能最终做出个东西送给她 或
  • Python2.7.X的安装

    感谢关注的同志 今天写一下Python2 7 X的安装 与大家分享 1 官网下载 在python官网下载https www python org downloads 我这里下载的是Python 2 7 15 https download c
  • 汇尔M1折腾记

    汇尔M1原价挺贵的 现在淘宝11块钱 所以买了几个 带近4000毫安电池 可当充电宝 usb口支持3G上网卡分享 一个可移动的路由器 好像厂家倒闭了 其他功能基本与普通路由器一致 使用了openwrt系统 我也不知道这个是啥 好像是个路由器
  • make 时遇到 /usr/bin/ld: cannot find -lstdc++

    在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息 usr bin ld cannot find lxxx 这些问题都是因为找不到相应的lib文件 其中xxx即表示函式库文件名称 如 libc so li
  • STM32 进阶教程 15 - 串口DMA收发

    前言 串口操作相信大家一定很熟悉 如果你已经会串口的收发数据 并可以灵活使用轮询及中断方式对串口进行数据收发 那么恭喜你 学完本节内容后 也将可以学会串口的更高级操作方式 DMA方式 DMA操作串口可以大大减轻MCU的负担 同时也可以加快数
  • C++ stdlib.h

    stdlib 头文件即standard library标准库头文件 stdlib 头文件里包含了C C 语言的最常用的系统函数 该文件包含了的C语言标准库函数的定义 stdlib h里面定义了五种类型 一些宏和通用工具函数 类型例如size
  • 利用Python爬虫,查询12306车次信息

    效果展示 分析目标网站 进入12306官网 以商丘南到汝州为例 在点击查询后会跳转到查询结果的网站 右键点检查或审查元素 在弹出的控制台中点网络或network 如果没有显示数据的话 刷新一下网页就有了 在点击Fetch XHR后会发现有一
  • 62、shell转义,单引号与双引号,反撇号

    1 转义 单引号和双引号都能关闭shell对特殊字符的处理 不同的是 双引号没有单引号严格 单引号关闭所有有特殊作用的字符 而双引号只要求shell忽略大多数 具体的说 就是 美元符号 反撇号 反斜杠 这3种特殊字符不被忽略 不忽略美元符号
  • [Pytorch系列-69]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - test.py代码详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 Pytorch系列 66 生成对抗网络GAN 图像生成开源项目pytorch CycleGAN and pix2pix pix2pix te
  • pycharm remote 远程项目 同步 本地_工具篇-vscode sftp代码同步

    之前有一篇写过pycharm远程访问服务器 这里还写vscode的一个类似功能理由有两个 vscode相比于pycharm占用的内存要小 vscode远程访问不要钱 而pycharm必须要付费的专业版才拥有这个功能 但是vscode也有不好
  • WPF界面设计—撸大师

    WPF界面设计 模仿了金山卫士 360 鲁大师的界面
  • keepalived 笔记

    keepalived可以认为是VRRP协议在Linux上的实现 主要有三个模块 分别是core check和vrrp core模块为keepalived的核心 负责主进程的启动 维护以及全局配置文件的加载和解析 check负责健康检查 包括
  • STM32CubeMX系列教程

    微雪课堂 STM32CubeMX系列教程 https www waveshare net study portal php mod list catid 40 page 1
  • 如何保护自己知识产权,建立代码护城河——建立自己的静态库,x86和arm平台的实例讲解

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