delvewheel进行repair时报Unable to find library: msvcr100.dll【已解决】

问题描述

我自己编译了我下载的一个开源软件pyuvc,编译出whl文件后使用delvewheel进行repair,也就是把它依赖库dll库拷贝到whl文件中。等效的的执行命令是:

python.exe -m  delvewheel repair     -w .\wheelhouse\  dist\pupil_labs_uvc-1.0.0rc2.dev0+g9e8ea60.d20240103-cp311-cp311-win_amd64.whl --add-path  'C:\\Users\\xxxx\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\pupil_pthreads_win\\data\\lib\\x64;.\\tmp\\libjpeg-turbo-install/bin;.\\tmp\\libusb-install/libusb-1.0.26-binaries/VS2015-x64/dll'

命令行报错是:

raise FileNotFoundError(f'Unable to find library: {dll_name}')
FileNotFoundError: Unable to find library: msvcr100.dll

如何解决

网上各种修复方法,试了都不靠谱,还是下载了delvewheel源码一点点加打印分析,发现是dll和whl的CPU位宽类型不一样导致的。
我系统是64位的windows,我系统上在C:\Windows\SysWOW64这个目录下是存在msvcr100.dll这个文件的,但是它是32位的,delvewheel 把它忽略了。delvewheel 要求whl和dll的CPU位宽是一致的。如果whl是64位CPU,则要求dll也要是64位的。
解决办法就是拷贝一个64位的msvcr100.dll到–add-path 参数后面的任意一个目录下就行。

如何区分dll文件的位宽

使用二进制方式直接打开msvcr100.dll,则可以看到,64位dll中,第一个PE后面跟着一个字母d:
在这里插入图片描述

32位的dll,第一个PE后面跟着一个L:
在这里插入图片描述

delvewheel如何判断dll是否匹配

在_dll_utils.py中,find_library()函数中可以看到判断dll是否匹配的逻辑。

dll_path = None
for item in contents:if name == item.lower():path = os.path.join(directory, item)if os.path.isfile(path) and get_arch(path) == arch:dll_path = pathbreak

除了判断dll的名字,还要判断dll文件的位宽是否匹配。
判断dll位宽的核心的逻辑如下(判断PE后面两个字节的内容):

def machine_field_to_type(cls, machine_field: int) -> typing.Optional['MachineType']:"""Given the Machine field of a PE file, return the machine type orNone if the machine type is unsupported."""if machine_field == 0x14c:return cls.I386if machine_field == 0x8664:return cls.AMD64if machine_field == 0xaa64:return cls.ARM64return None

可以看到,这里的类型判断和上面截图里二进制内容是对应的,PE后面跟着0x8664就是64位,跟着0x14c就是32位。当然由于是小端模式,在二进制文件中低位在前。

msvcr100.dll下载链接

我上传了一个压缩包,里面有32位和64位版本的各一个:

百度网盘链接:https://pan.baidu.com/s/129EYri6OPq990qLPU4vMKw?pwd=u913

在这里插入图片描述

参考资料

https://github.com/adang1345/delvewheel

如何判断一个dll/exe是32位还是64位?

完美解决msvcr100.dll找不到!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大图热控授权世强硬创代理,液冷板产品可解决超高热流密度散热难题

受益于下游产业发展,液冷板(又称为“水冷板”)市场需求持续上升,行业发展迅速。国内企业为了在竞争激烈的市场中生存,也在不断开发新的散热技术及产品,苏州大图热控科技有限公司便是其中之一。 为将液冷产…

Java大数据hadoop2.9.2搭建伪分布式yarn资源管理器

1、修改配置文件 cd /usr/local/hadoop/etc/hadoop cp ./mapred-site.xml.template ./mapred-site.xml vi mapred-site.xml <configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property> &l…

(02)半导体前道制程工艺概览

01、半导体制程工艺概览 在第一篇的最后,我们说到金属氧化物半导体场效应晶体管(MOSFET)的平面式结构让人们可以在晶圆上同时制造出好几个MOSFET。且与第一代晶体管BJT不同,MOSFET无需焊接过程。本期内容就让我们来详细了解一下具体的制程工艺。 为方便讲解,我们先来看一…

蓝牙技术在智能交通系统中的革新与应用

随着科技的不断进步&#xff0c;蓝牙技术已经成为智能交通系统中的一项关键技术。其无线连接和低功耗的特性为交通管理和车辆通信提供了新的解决方案。本文将深入探讨蓝牙技术在智能交通系统中的应用&#xff0c;以及其对交通效率、安全性和用户体验的积极影响。 1. 蓝牙技术在…

下载知虾数据分析软件:优化店铺运营、提高转化率的利器

在如今竞争激烈的电商市场中&#xff0c;对销售数据、流量以及买家行为等关键指标的监控和分析至关重要。Shopee平台为卖家提供了一个内置的在线数据分析工具——“Shopee Analytics”&#xff08;知虾分析&#xff09;&#xff0c;让卖家能够轻松实现对店铺运营的优化、提高转…

海昌海洋公园用泛微千里聆RPA智能采集、识别、分析网络数据,助力优化运营服务

海昌海洋公园控股有限公司&#xff08;以下简称“海昌海洋公园”&#xff09;是中国知名的主题公园和配套商用物业开发及运营商。经过近二十年发展&#xff0c;凭借行业优秀的极地海洋动物保育技术&#xff0c;公司将其业务模式逐步推广到核心城市&#xff0c;展开了海昌海洋公…

教育src漏洞挖掘-2023-白帽必挖出教程

0、关于为什么要写这篇文章 作为刚接触渗透的小伙伴儿肯定都想快速挖到漏洞提交平台获取注册码&#xff0c;或者想获取更多积分换取证书&#xff0c;这篇文章就是为了帮助各位师傅们快速上手挖取教育src 1、开始前准备 每一次成功的渗透&#xff0c;都有一个非常完备的信息搜…

胎牛血清,预计2028年达到27.5亿美元以上

胎牛血清是从胎牛的脐带或心脏中提取出的一种高营养的医疗用品。本文将从全球市场和中国市场两方面进行分析其发展趋势。 全球市场分析&#xff1a;胎牛血清在药品和生物科技行业中有着广泛的应用&#xff0c;如细胞培养、疫苗制备、诊断试剂盒和治疗药物等。随着生物技术的不断…

怎么测试电源负载瞬态响应?具体步骤是什么?

负载瞬态响应(Load Transient Response)指的是电路或系统在负载发生瞬态变化时,输出电压或电流出现的瞬时变化的情况。 电源负载瞬态响应测试是评估电源在负载变化时性能表现的一种重要方法。在实际应用中&#xff0c;电源负载的变化是不可避免的&#xff0c;因此准确评估电源的…

Golang里空结构体struct{}的介绍和使用

s t r u c t struct struct是 G o l a n g Golang Golang里的关键字&#xff0c;用于定义结构类型 比如 type Student struct{id intname string }struct{}是有 0 0 0个元素的结构体. struct{}{}表示类型struct{}的值为空{} 1.性质 1.1不占用内存 大小为 0 0 0&#xff0c;…

大创项目推荐 深度学习卷积神经网络的花卉识别

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

开启物联网的魔法之门 - 深入探索发布/订阅模式

文章目录 MQTT 发布/订阅模式MQTT 发布/订阅中的消息路由MQTT 与 HTTP 请求响应MQTT 与消息队列Paho Java 使用示例结语 MQTT 发布/订阅模式 发布订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;是一种消息传递模式&#xff0c;它将发送消息的客户端&#xff08;发…

如何使用可视化管理工具DockerUI远程管理docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

地址变量与函数进阶

指针与函数的高级用法 1.数组2.函数的重载3.函数的指针类型参数4.可变参数函数链表5.函数指针6.指针函数7.内联函数8.总结 在上节中我们简单谈论了指针变量&#xff0c;这节我们就来讨论指针变量的实际应用。 1.数组 相信有一定C语言基础的小伙伴一定很熟悉这个类型。数组可以…

【C++期末编程题题库】代码+详解18道

适合期末复习c看&#xff0c;或者刚入门c的小白看&#xff0c;有的题会补充知识点&#xff0c;期末复习题的代码一般比较简单&#xff0c;所以语法上没那么严谨。本文所有题目要求全在代码块的最上面。 目录 1、设计复数类 2、设计Computer类 3、实现相加的函数模板 4、圆类…

wait 和 notify 这个为什么要在synchronized 代码块中?

一个工作七年的小伙伴&#xff0c;竟然不知道” wait”和“notify”为什么要在 Synchronized 代码块中 。 好吧&#xff0c;如果屏幕前的你也不知道&#xff0c;请在公屏上刷”不知道“。 对于这个问题&#xff0c;我们来看看普通人和高手的回答。 一、问题解析 1. wait 和 n…

线程同步之:QMutex\QMutexLocker

1、基于互斥量的线程同步类QMutex 2、lock() 与 unlock()必须配对使用。 2.1 lock() unlock() 2.2 tryLock() unlock() 3、QMutexLocker()是另一个简化了互斥量处理的类。在QMutexLocker实例变量的“生命周期”内的代码段 得到保护。 QMutexLocker的构造函数接受要给互斥量…

yolov5旋转目标检测-遥感图像检测-无人机旋转目标检测(附代码和原理)

目前&#xff0c;无人机技术的快速发展带来了遥感图像处理领域的革命性改变。然而&#xff0c;由于无人机在飞行时可能会出现旋转的情况&#xff0c;因此对于旋转目标的检测也成为了一个重要的问题。针对这个问题&#xff0c;yolov5可以提供一种高效的解决方案。 以下是介绍的分…

秋招复习之哈希表

目录 前言 1 哈希表 哈希表常用操作 哈希表简单实现 哈希冲突与扩容 2 哈希冲突 链式地址 开放寻址 线性探测 平方探测 多次哈希 编程语言的选择 3 哈希算法 哈希算法的目标 哈希算法的设计 常见哈希算法 数据结构的哈希值 总结 前言 秋招复习之哈希表。 1 哈希表 「哈希表 h…

万界星空科技云MES,助力客户快速构建数字工厂

一、MES发展趋势 1、定制化趋势 工业2.0、3.0的技术已较为成熟&#xff0c;部分制造业水平较为发达的国家已经率先进入以网络化、智能化为代表的工业4.0发展阶段,MES作为制造业规划层随着物联网等持续发展&#xff0c;为适应定制化时代&#xff0c;整体技术模块化、服务化将重…