Linux学习——动态库的创建

2023-11-14

一.动态库特点:

在这里插入图片描述

二.生成动态库(共享库)

例子文件:
test.c:

#include <stdio.h>
#include "mydemo.h"

int main()
{
        printf("Test begin : \n");
        hello();
        show();

        return 0;
} 

show.c :

#include <stdio.h>

void show(void)
{
        printf("Nice !\n");
        return;
}

hello.c :

#include <stdio.h>

void hello (void)
{
        printf("Hello World\n");
        return;
}

mydemo.h :

void show(void);
void hello(void);                

(1)生成目标文件 .o

gcc -c -fPIC -Wall 文件名.c

-fPIC 表示告诉编译器生成位置无关代码,也就是这些代码可以在任意位置执行
-Wall 表示尽可能检查错误

在这里插入图片描述

(2)创建共享库,以command为例

gcc -shared libcommand.so.1 文件名.o

格式为 lib + 库名 + .so + .x ,最后 .x 表示可以给该库定义一个数字,用来表示版本,也可以不使用 .x ,看个人喜欢

在这里插入图片描述

(3)给共享库创建链接

ln -s libcommand.so.1 libcommand.so

这里后面生成的链接格式 严格为 lib + 库名 + .so

在这里插入图片描述

(4)编译测试

gcc test.c -L . -lcommand -o test

在这里插入图片描述
在gcc编译器中,默认先以 找共享库 ,其次才是去找静态库编译

这里 程序执行错误,是因为系统默认在 /usr/lib 或者 /lib/ 下去寻找库,但是我们创建的库不在 默认的路径范围之中, 需要我们自己 加入 环境变量,这样才能让编译器找到 我们自己创建的库

(5)让系统找到库的方法

这里有三种方法,常用的是最后一种 ,因为这样 效果才能 存在持久, 第二种方法的话,打开新的端口 就失效了

在这里插入图片描述

1.方法二:

原来的端口:
在这里插入图片描述
新的端口:
在这里插入图片描述

2.方法三:

在这里插入图片描述
在 创建的 my.conf 文件中 写入创建库的路径 就可以了,路径可以使用 pwd查看 最后 用 ldconfig 生效

生效后:
在这里插入图片描述

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

Linux学习——动态库的创建 的相关文章

  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • 如何将目录及其子目录中的所有 PDF 文件复制到一个位置?

    如何全部复制PDF文件从目录及其子目录到单个目录 实际上还有更多的文件 并且深度有些任意 假设四个目录的最大深度是公平的 我想这些文件需要重命名 如果a pdf例如 位于多个目录中 因为我会adding https ebooks stack
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器
  • 如何查询X11显示分辨率?

    这似乎是一个简单的问题 但我找不到答案 如何查询 通过 X11 存在哪些监视器及其分辨率 查看显示宏 http tronche com gui x xlib display display macros html and 屏幕宏 http
  • Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

    我使用 Capistrano v3 和 capistrano symfony gem 设置了以下部署脚本 我正在使用 Ubuntu 14 4 部署到 AWS EC2 实例 我正在连接从 AWS 下载的 pem 文件 我的deploy rb中

随机推荐

  • 循环控制结构小题1

    include
  • mapbox-gl支持多种坐标系

    文章目录 前言 效果 总结 前言 mapbox默认的投影是3857 但是实际应用中我们经常会使用高德 百度 天地图的服务 原生mapbox是不支持的 需要我们修改源码以支持以上坐标系 参考 支持百度 高德坐标系 mapboxgl 纠偏百度地
  • vue 项目中 zip 压缩包文件下载

    vue 项目中 zip 压缩包文件下载 参考文章 胡新fa 文件下载流程 参考文章 Mr 裴 压缩包下载打不开问题 參考文章 sqwu 注意 一定要在接口中配置 responseType blob 该属性 headers 根据需求添加 re
  • URL 地址栏锚点 window location hash 使用方法

    location是javascript里边管理地址栏的内置对象 比如location href就管理页面的url 用location href url就可以直接将页面重定向url 本文转自米扑博客 URL 地址栏锚点 window loca
  • ULN2003芯片控制直流电机学习

    ULN2003 双极型线性集成电路 达林顿晶体管阵列 ULN2003是一个单片高电压 高电流的达林顿晶体管阵列集成 电路 它是由7对NPN达林顿管组成的 它的高电压输出特性和阴 极箝位二极管可以转换感应负载 单个达林顿对的集电极电流是 50
  • pyspark_自定义udf_解析json列【附代码】

    pyspark 自定义udf 解析json列 附代码 一 背景 二 调研方案 三 利用Pyspark udf自定义函数实现大数据并行计算 整体流程 案例代码运行结果 案例代码 代码地址 代码 一 背景 车联网数据有很多车的时序数据 现有一套
  • GITHUB实用有趣工具推荐

    1 algorithm visualizer 一个交互式的在线可视化学习算法平台 能在可视化区域看到每行代码执行对应的操作 并且有对应的动画呈现 使你更加容易理解算法 2 pcottle learnGitBranching 一个在线可视化交
  • python能做什么毕业设计-有没有适合python做的毕设题目,现在不知道做什么了?...

    对于这个问题有三个解决方案 1 自己开发 2 借助开源项目 3 付费开发 结合自身的能力和需求 大家可以自行寻找合适的解决方案 1 自己开发 难度 高 实用性 低 价格 免费 Python 是一门非常好入门的语言 普通人跟着一门教程认真学
  • jenkins部署 java项目到远程 windows服务器

    jenkins部署 java项目到远程 windows服务器 1 查看windows服务器是否有 ssh服务 cmd模式 输入 ssh 如果报错就去安装ssh 可以去下 openSSH 2 然后直接用自己的电脑就是客户端 用xshell 连
  • 79. Word Search

    Given a 2D board and a word find if the word exists in the grid The word can be constructed from letters of sequentially
  • 蓦然回首 灯火阑珊

    时间的沙漏沉淀着无法逃离的过往 记忆的双手总是拾起那些明媚的忧伤 雨声 划破伤痛的记忆 泪水 激起心中的波浪 你的一闪而过 让我记住这永恒的瞬间 你在我生命中留下不褪色的光芒 就如流星的坠落绚丽地点亮了整个星空 很幸运 就像是个命运的宠儿
  • Bootloader

    Bootloader 一段有下载和引导功能的程序 下载应用程序 引导使MCU运行在应用程序中 只在有更新请求或者APP无效的时候才会激活 APP和Bootloader都存在Flash中 Flash Driver用来擦除APP 下载临时存放在
  • 力扣2596. 检查骑士巡视方案

    题目描述 骑士在一张 n x n 的棋盘上巡视 在 有效 的巡视方案中 骑士会从棋盘的 左上角 出发 并且访问棋盘上的每个格子 恰好一次 给你一个 n x n 的整数矩阵 grid 由范围 0 n n 1 内的不同整数组成 其中 grid
  • latent-diffusion model环境配置,这可能是你能够找到的最细的博客了

    文章目录 前言 一 环境配置 1 创建requirement txt文件 2 提前从Github上下载好taming transformers和clip 3 创建conda环境 并安装requirement txt文件 4 安装torch
  • oracle sql model,SQL语句中的model用法

    事情起因 今天看到一条非常 稀奇古怪 的SQL select语句中 在表后面跟了一大窜以model开头的东东 后来查一下资料 原来model在数据仓库中是比较有地位的 列一下几个简单的测试 more 1 测试表中数据 SQL gt sele
  • 使用阿里PAI DSW部署Stable Diffusion WebUI

    参考内容为 快速启动Stable Diffusion WebUI 进入到网址https pai console aliyun com 里边 点击创建实例 把实例名称填写好 选择GPU规格 然后选择实例名称是ecs gn6v c8g1 2xl
  • MySqL导出表结构文档

    SELECT COLUMN NAME 列名 COLUMN COMMENT 名称 COLUMN TYPE 数据类型 DATA TYPE 字段类型 CHARACTER MAXIMUM LENGTH 长度 IS NULLABLE 是否必填 COL
  • 如何优化 API 开发?

    API 是一套规则 定义了应用程序或设备的用户友好性 它是一个软件中介 使应用程序之间可以互动 它可以是基于网络的系统 数据库系统等 像 Netflix Facebook 和 Github 这样的科技巨头在这方面处于领导地位 他们雇佣 AP
  • React-hooks面试考察知识点汇总

    Hook 简介 Hook出世之前React存在的问题 在组件之间复用状态逻辑很难 React 没有提供将可复用性行为 附加 到组件的途径 例如 把组件连接到 store 有一些解决此类问题的方案 比如 render props 和 高阶组件
  • Linux学习——动态库的创建

    Linux 创建动态库 一 动态库特点 二 生成动态库 共享库 1 生成目标文件 o 2 创建共享库 以command为例 3 给共享库创建链接 4 编译测试 5 让系统找到库的方法 1 方法二 2 方法三 一 动态库特点 二 生成动态库