树莓派——制作静态库、动态库

2023-11-16

库的特点

  1. 库是可执行代码的二进制形式,即将源代码转换成二进制的源代码,相当于对源代码进行了加密,别人可以看见库使用库,但是看不见库的源代码
  2. 2种类型库:静态库 libxxx.a,动态库 libxxx.so
  3. 静态库:在程序执行前就加入到目标程序中
  4. 动态库:在程序执行时动态(临时)由目标程序去调用

库制作及使用

制作

静态库
gcc demo1.c -c//将demo1.c生成demo1.o文件
ar rcs libdemo1.a demo1.o//将demo1.o生成libdemo1.a文件

动态库
gcc -shared -fpic demo1.c -o libdemo1.so//将demo1.c生成libdemo1.so文件
//-shared 指定生成动态库
//-fpic 标准,fPIC 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码

使用

静态库
gcc demo.c -ldemo1 -L ./ -o demo  //编译目标程序和静态库文件生成可执行文件demo
//-L表示让gcc从-L指定的目录寻找,默认在usr/lib或者usr/local/lib里面寻找
//-l是指定要用的静态库,掐头去尾只留下demo1,lib去掉 .a去掉
//gcc默认到use/lib里面寻找文件,通过-L ./把它定为到当前目录下寻找
./demo //运行生成的此可执行文件即可输出目标程序结果

动态库
gcc demo.c -ldemo1 -L ./ -o demo  //编译目标程序和动态库文件生成不可执行文件demo
1.想要运行可执行文件需创建shell脚本文件 
2.创建start.sh脚本文件:vi start.sh
3.export LD_LIBRARY_PATH="/home/pi/back/test"
 ./demo  //脚本文件内容
4.chmod +x start.sh //给脚本文件一个可执行权限x
5.  ./start.sh //运行此可执行脚本文件即可输出目标程序结果

转载请标明出处

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

树莓派——制作静态库、动态库 的相关文章

  • 用另一个文件的标签为图表(ggplot2)中的标题添加下标

    在我的程序中 我有两个主要文件 第一个包含数据 第二个包含标签 或图形标题 文件总数1 数据 3 10000 3 32039232 1 0 0017290351 2 0 0002781092 3 10001 3 32101193 1 0 0
  • Xvfb 冻结初始化 GLX 扩展

    我正在尝试运行无头 Xvfb 服务器来捕获 Amazon EC2 micro 上的屏幕截图 但它在 GLX 上陷入了困境 我使用此脚本安装了 GLX Xvfb 和所有库 https gist github com joekiller 414
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • 来自守护程序的错误响应:加入会话密钥环:创建会话密钥:超出磁盘配额

    我尝试在我的服务器上安装 docker 使用本教程 https docs docker com install linux docker ce ubuntu 我想远程运行 docker 镜像并使用 portainer Web 界面来管理一切
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win

随机推荐

  • Redis类型之Geospatial

    1 简介 Redis 3 2 中增加了对GEO类型的支持 GEO Geographic 地理信息的缩写 该类型 就是元素的2维坐标 在地图上就是经纬度 redis基于该类型 提供了经纬度设置 查询 范围查询 距离查询 经纬度Hash等常见操
  • locate函数

    include
  • 如何从远程服务器复制文件,远程服务器文件如何复制到本地

    远程服务器文件如何复制到本地 内容精选 换一换 本节为您介绍如何在本机使用远程登录工具MSTSC登录Windows裸金属服务器 裸金属服务器状态必须为 运行中 如果Windows裸金属服务器采用密钥方式鉴权 需要先获取裸金属服务器的密码 获
  • 3D游戏编程与设计作业——游戏智能

    一 作业要求 坦克对战游戏AI设计 从商店下载游戏 Kawaii Tank 或 其他坦克模型 构建AI对战坦克 具体要求 使用 感知 思考 行为 模型 建模 AI 坦克 场景中要放置一些障碍阻挡对手视线 坦克要放置一个矩阵包围盒触发器 保证
  • 如何解决Exception in thread “main” java.sql.SQLException: Statement.executeUpdate() or Statement.execute

    场景 黑马程序员javaweb基础教程 视频jdbc快速入门时出现的报错 问题描述 Exception in thread main java sql SQLException Statement executeUpdate or Stat
  • late_initcall和module_init

    late initcall和module init 分类 linux驱动程序设计 2012 11 04 15 14 3680人阅读 评论 0 收藏 举报 所有的 init函数在区段 initcall init中还保存了一份函数指针 在初始化
  • unittest+ddt自动化测试相关知识点

    unittest是Python单元测试框架 主要分为 测试用例TestCase 一个完整的测试流程 测试套件TestSuite 多个测试用例集合在一起 执行 结果呈现TextTestRunner 用例运行和结果呈现 结果呈现常用HtmlTe
  • 环境配置tips

    一 MySQL在Linux下数据库名 表名 列名 别名大小写规则是这样的 1 数据库名与表名是严格区分大小写的 2 表的别名是严格区分大小写的 3 列名与列的别名在所有的情况下均是忽略大小写的 4 变量名也是严格区分大小写的 修改不区分大小
  • OpenWrt系统无法进入Luci解决办法之一

    当在OpenWrt系统重启后 打开Luci后台时有时可能会遇到以下错误报告 usr lib lua luci dispatcher lua 577 bad argument 1 to pairs table expected got nil
  • cocos2d-x 4.0 版本修改点

    转自 https discuss cocos2d x org t cocos2d x v4 0 released 48487 Features support metal on iOS macOS use CMake for all pla
  • vue : 无法加载文件 \Node.js\node_global\vue.ps1。未对文件 \Node.js\node_global\vue.ps1 进行数字签名。无法在当前系统上运行该脚本。

    vue 无法加载文件 D Node js node global vue ps1 未对文件 D Node js node global vue ps1 进行数字签名 无法在当前系统上运行该脚本 最近在使用powershell下使用 vue
  • pandas的行列获取/pandas iloc和loc的使用/如何获取pandas的行和列

    Pandas行和列的获取 由于平时没有系统的学习pandas 导致在实际应用过程中 对于获取df中的行和列经常出现问题 于是总结一下 供自己以后参考 参考的书籍在线版链接 利用 Python 进行数据分析 第 2 版 0 查看手册 请当你看
  • 深度学习之基于VGG16与ResNet50实现鸟类识别

    鸟类识别在之前做过 但是效果特别差 而且ResNet50的效果直接差到爆炸 这次利用VGG16与ResNet50的官方模型进行鸟类识别 1 导入库 import tensorflow as tf import numpy as np imp
  • ubuntu安装/查看已安装包的方法

    自己折腾ubuntu安装包来着 发现一篇文章非常实用 将apt get和dpkg等命令的参数讲解非常全面 于是转载过来 中文的比英文的帮助看着还是顺手一点 原文链接 http www cnblogs com forward archive
  • vue 给页面局部加水印和全部加水印

    局部加水印 在公共类js下 新建一个watermask js 代码如下 export default tool js addWaterMark const strArr localStorage getItem loginUserName
  • 图的深度优先遍历(Depth First Search)

    图的深度优先遍历 Depth First Search 基本思想 类似于二叉树的先序遍历 假设图中所有结点均未被访问 从初始结点访问 访问其第一个邻接结点 接着以被访问的邻接结点作为初始结点 访问它的第一个邻接结点 递归的过程 算法步骤 访
  • Cesium快速入门

    Cesium是全世界使用最广泛的3D WebGIS引擎 国内有若干个GIS厂家的3D GIS引擎也是基于Cesium进行开发 随着国家 新基建 数字化 战略的不断发展深化 越来越多的城市数字化项目需要用上3D GIS引擎 对Web端而言 C
  • 简单记录搭建SSM(Spring+Spring MVC+Mybatis)整合

    业务层 View 数据显示 Controller 业务控制 执行成功怎么处理 执行失败怎么处理 Service 业务处理 Model 数据库相关实体类 增删改查 工程搭建 第一步 创建Maven web工程 点击finish创建完毕工程 第
  • C++在路径下新建一个指定名称的文件夹

    在保存数据是 我们希望将新生成的数据单独保存在一个文件夹中 其实我们可以通过程序自动生成一个指定名称的文件夹 存放数据 而不必提前手动新建文件夹并修改名称 代码实现的方法也很简单 但是需要注意的是该方法需要包含windows h头文件 代如
  • 树莓派——制作静态库、动态库

    库的特点 库是可执行代码的二进制形式 即将源代码转换成二进制的源代码 相当于对源代码进行了加密 别人可以看见库使用库 但是看不见库的源代码 2种类型库 静态库 libxxx a 动态库 libxxx so 静态库 在程序执行前就加入到目标程