使用VC扩展Python编译出错的问题

【pybind11入门】Windows下为Python创建C++扩展|安装、CMake编译、调用 在Windows下使用pybind11为python添加C++扩展,这篇文章记录下整个安装、测试、使用流程。 主要内容: 1.安装编译工具 2.测试pybind11编译是否正常 3.使用pybind11创建C++扩展 4.在python中调用 1.安装编译工具 \quad 在Windows环境下进行编译,pybind11仅支持CMake + MSVC(Microsoft Visual Studio),其中CMake版本至少为3.4,VS至少为Visual Studio2017。 不能使用VS直接编译c. 阅读详情

欢迎使用二维码访问本文:



这两天尝试使用C扩展Python,在Ubuntu下很顺利,无阻碍完成。

在Windows下,我先直接使用VC按某博客上说的做(建一个DLL工程),结果出现一堆的符号找不到:

_imp__Py_BuildValue

但我确定已经把库目录以及包含目录设置正确了。


放弃VC,我用setup.py的方式来编译总可以吧。

结果_imp__xxx这样的符号没问题了,但我使用的另一个库又出问题了,一直提示找不到xx符号:

我确定我已经在setup.py里设置好了相关的lib路径,不应该出现这样的问题啊,我的setup.py内容如下:

from distutils.core import setup,Extension

module1 = Extension(name = 'pyNV', 
                    sources = ['pyNV.c'],
                    define_macros = [('QLIB_STATIC', None)])

setup(name = 'pyNV', version = '1.0', 
      description = 'NV operation python extention',      
      ext_modules = [module1])


代码中也已经添加了相关的lib导入代码:

#include "QLib.h"
#include "QLib_Defines.h"
#pragma comment( lib, "QMSL_MSVC9R.lib" )


结但就是给我提示找不到XX符号,XX符号已经在Qlib.h中定义过了,在lib中也确定是有的,这是怎么回事。。。。


然后Google,Baidu,均无解。。。

然后注意到了setup.py产生的build文件中有这样的内容:lib.amd64-2.7

好像不对劲,我的系统是Win7-64bit,python也是python2.7-amd64,但是QMSL_MSVC9R.lib好像是32位版本啊,靠,困扰了我两天的问题难道就是这样???

果断卸载python2.7-amd64版本,重新下载了一个python2.7的32bit版本,然后再次运行python setup build,成功!

C:\Users\Administrator\Desktop\pyNV>python setup.py build
running build
running build_ext
building 'pyNV' extension
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -DQLIB_STATIC -IC:
\Python27\include -IC:\Python27\PC /TcpyNV.c /Fobuild\temp.win32-2.7\Release\pyNV.obj
pyNV.c
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\Python27\lib
s /LIBPATH:C:\Python27\PCbuild /EXPORT:initpyNV build\temp.win32-2.7\Release\pyNV.obj /OUT:build\lib.win32-2.7\pyNV.pyd
/IMPLIB:build\temp.win32-2.7\Release\pyNV.lib /MANIFESTFILE:build\temp.win32-2.7\Release\pyNV.pyd.manifest
   正在创建库 build\temp.win32-2.7\Release\pyNV.lib 和对象 build\temp.win32-2.7\Release\pyNV.exp

看来确实就是库不兼容的问题所导致的找不到符号错误。


各位使用setup.py编译时,可以看看编译命令,如果使用的是64bit的编译器,产生的64bit的扩展,则你的C程序所调用的库文件也应该是64bit才对,至于能不能调用32bit,我就没时间去深究了。

希望这点信息能帮到同样迷惑的你。


解决PyTorch C++扩展编译错误:Ninja构建工具安装与配置指南 在Python高性能计算领域,C++扩展编译是提升程序执行效率的关键技术。其原理在于通过Python的C API将C++编写的核心计算模块编译为动态链接库,供Python解释器调用,从而兼顾开发效率与运行性能。这一技术为深度学习框架(如PyTorch、TensorFlow)和科学计算库(如NumPy)提供了底层性能保障。在工程实践中,构建系统(Build System)负责管理这一编译流程,而Ninja作为一款专注于速度的现代化构建工具,因其极致的编译速度和可靠的增量编译机制,被PyTorch等项目的C++ 阅读详情

相关推荐

Windows下Python安装C++编译工具:解决pip安装报错的完整指南

在Python开发中,许多高性能库的核心模块采用C/C++编写以提升执行效率,这涉及到源代码编译为机器码的过程。编译原理决定了Python解释器需要调用本地编译器将C扩展模块构建为动态链接库。对于Windows平台,由于缺乏Linux/macOS预装的GCC工具链,必须依赖微软的MSVC编译器。这一技术需求在安装数据分析库如pandas、numpy或网络爬虫框架scrapy时尤为关键,因为这些库常包含需要编译的C扩展。通过配置Visual Studio Build Tools,开发者可以建立完整的编译环境,

congsong2560的博客 407

Windows PyTorch cpp_extension配置踩坑

首先要安装ninja,有两个方法,一是pip install ninja,二是去ninja官网下载exe后放到本机PATH里。总之就是要能够在cmd里执行ninja --version成功   然后是如果本机语言是简体中文,那么pytorch报错时无法将中文decode成utf-8,需要自行decode成gbk看报错信息   然后是如果找不到cl.exe、cstddef、basetsd.h...

QixuanAIRobot的专栏 1万+

Windows下Python安装C++编译器全攻略:解决pip安装报错

在Python开发中,许多高性能库的核心模块采用C/C++编写以实现计算加速。这些扩展模块需要被编译为本地二进制代码才能被Python解释器调用。在Windows平台上,由于缺乏GCC等开源工具链,必须依赖Microsoft Visual C++编译器(MSVC)来完成编译过程。这一技术机制确保了Python扩展与系统运行时的二进制兼容性,是Windows环境下Python生态正常运作的基础。对于数据科学、机器学习等领域的开发者而言,正确配置C++编译环境是使用NumPy、Pandas等关键库的前提。本文针

weixin_30443813的博客 445

关于cpp_extension的那些BUG

1. 找不到文件 Traceback (most recent call last): File "D:\Python\Python36-32\lib\site-packages\selenium-3.4.3-py3.6.egg\selenium\webdriver\common\service.py", line 74, in start stdout=self.log_file, stderr=self.log_file) File "D:\Python\Python36-32\lib\

如果想成为中心,那么就到中心去吧。 2577

Godot引擎深度集成Python:从源码编译到跨平台部署实战指南

游戏引擎与脚本语言的结合是扩展应用能力边界的关键技术路径。Godot作为开源轻量级游戏引擎,其原生脚本语言GDScript虽易用,但在对接庞大第三方生态时存在局限。通过模块化系统将Python运行时深度集成至引擎核心,开发者可利用Python丰富的库生态(如NumPy、Requests)处理复杂逻辑,同时发挥Godot的渲染与交互优势。这种架构的核心价值在于打破了单一语言限制,实现了游戏逻辑与后台服务、数据分析及AI推理的高效协同。在科学可视化、教育工具及数据仪表盘等跨平台应用场景中,该方案能显著提升开发效

weixin_33994429的博客 394

Windows下编译flash_attn 2.3.6的完整指南

注意力机制是Transformer架构的核心组件,而flash_attention通过优化内存访问模式显著提升了计算效率。在深度学习工程实践中,CUDA扩展编译是将算法部署到GPU的关键步骤,涉及编译器工具链配置、算力架构适配等核心技术。Windows平台由于开发环境差异,在编译高性能CUDA扩展时面临独特挑战。本文以flash_attn 2.3.6为例,详细解析如何配置MSVC编译器、处理Windows符号链接问题,并通过CMake和Ninja构建系统完成混合精度注意力模块的编译部署,最终在RTX 309

weixin_30947043的博客 565

python编译安装没有c扩展_python的C扩展编译失败

我不熟悉为python创建C扩展模块我从马克·卢茨的《编程python》一书中得到帮助我用这本书编写了一段代码来为python创建一个扩展模块,但是在运行安装程序时遇到了一个错误代码是#include#include//MODULE FUNCTIONS..........................................................static PyObject*...

weixin_39915210的博客 391

python扩展需要安装的VC++环境(python2.x 和 python3.x 两个版本)

在安装pyhton扩展时,会报错:unable to find vcvarsall.bat。 是因为扩展使用C/C++编写,缺少编译需要的环境,而python2.x和3.x使用的版本也不一样,此资源提供了两个都需要的,可以根据自己的python版本选择使用。

python setup install 报错解决方案

SystemExit("error: command 'link.exe' failed: No such file or directory",) C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools\VC 找到 这个就是打开一个含有vs编译环境的console 开始选了个这个,但是还是报错 正在创建库 build\temp.win-amd64-2.7\Re

JackBoy的博客 2054

python扩展需要安装的VC++环境(python2 3)

在安装pyhton扩展时,因缺少vc14时,python2和3,可以根据自己的python版本选择使用。

03 Aras Innovator二次开发-服务端方法(二)

Aras Innovator二次开发-服务端方法书写

企业信息化(PLM,ERP.MES) 2014

python扩展c教程_Python的C/C++扩展

Python提供了接口API,通过使用API函数可以编写Python扩展,在Windows下可以使用VC来编译Python扩展。C/C++扩展流程如下:(1)设置编译环境:VC6.0下,打开tools->options->directories->show directories for,将Python安装目录下的inlude目录添加到inlude files项中,将libs目录...

weixin_35981962的博客 429

AI量化交易工作台Vibe-Trading:用自然语言驱动策略回测与多智能体研究

量化交易通过数学模型和计算机程序执行投资决策,其核心在于将市场规律转化为可验证的策略。传统量化开发涉及数据获取、策略编写、回测验证等复杂工程,对非编程背景的从业者构成较高门槛。随着大语言模型技术的发展,自然语言交互正成为降低技术使用难度的关键。Vibe-Trading项目正是这一趋势的实践,它将金融工程任务封装为可调用的工具与技能,允许用户通过自然语言指令直接驱动策略回测、因子研究和投资组合分析。其技术价值在于构建了一个模块化的AI Agent框架,通过ReAct推理框架协调多个专项技能,并创新性地引入多智

weixin_28695161的博客 1565

VC与Python交互

一。静态编译Python的方法 1 准备工作    a 到http://www.python.org/ftp/python/2.5.4/下个包Python-2.5.4.tar.bz2    b 进入Python-2.5.4/PCbuild8 ,打开解决方案pcbuild.s

LEE的专栏 2037

开关电源EMI滤波设计:如何通过Cx和Cy电容精准抑制共模与差模干扰?

本文深入解析了开关电源EMI滤波设计中Cx和Cy电容的核心作用。Cx电容并联于火线与零线之间,专用于抑制差模干扰;Cy电容连接于火线/零线与地之间,则负责泄放共模干扰。文章详细阐述了二者选型、安规要求及PCB布局要点,并提供了基于测试频谱的实战调优策略,是解决电源传导噪声问题的实用指南。

7z8x2c4v6b9的博客 466

从仿真到实战:PMOS缓启动与栅极泄放电路的优化设计

本文深入探讨了PMOS缓启动与栅极泄放电路的优化设计,通过立创EDA仿真和实物调试,解决了关断速度慢和耐压问题。文章详细介绍了电路改进方案和低功耗优化技巧,为工程师提供了实用的工程实践建议,帮助提升电源开关电路的性能和可靠性。

weixin_28721917的博客 257

python扩展库安装失败_python 安装扩展库时出错 “unable to find vcvarsall.bat”

Windows 上通过 python setup.py install 安装 python 包,经常会出现这种错误。错误原因:python 编译器找不到计算机上面的 VC 编译器。下面介绍两种方法:1.安装vc和c++找到这个文件,例如C:\python3\Lib\distutils_msvccompiler.py,找到后用编辑器打开,找到“if version >=9 and versi...

weixin_33838871的博客 912

LDPC码译码原理——概率公式推导

怎么说呢,一直以来都想写一下博客。近半年多来我一直在学习LDPC码译码上的东西,主要是在FPGA实现上的,所以这次想写一些关于这方面的内容,包括译码的原理、仿真以及实现。(当然是基于准循环LDPC码上实现的)不过呢,我写这个的初衷是为了让初学者理解入门用的,而不是在大牛面前班门弄斧,有错误之处欢迎大家批评指正。不知道会不会有人一开始像我一样,为了学好LDPC码,先去好好了解其它的诸如RS码或者是卷...

stand_by_me123的博客 2万+

python spacy 安装超时_使用pip安装Spacy时出错

Requirementalready satisfied(use--upgrade to upgrade):spacyinc:\python27Collectingnumpy(fromspacy)Usingcached numpy-1.9.2.tar.gzRunningfromnumpy source directory.Collectingmurmurhash(fromspacy)Usingca...

weixin_39768083的博客 1189

告别两个电源模块!用UCD3138+四开关Buck-Boost,一个电路搞定电池充放电(附原理图分析)

本文详细介绍了采用UCD3138数字控制器和四开关Buck-Boost拓扑的双向DC/DC变换器设计,实现单一电路完成电池智能充放电管理。该方案显著降低BOM成本和PCB面积,提升系统效率至96.2%,适用于UPS、通信基站和储能系统,具有高效、紧凑和成本优势。

weixin_30256901的博客 397

【数据集】CMIP6气候模式数据下载

简介CMIP6及其气候模式数据下载

WW、forever的博客 9352

版本通用——Win10系统使用SWIG封装C++(Python调用)(二)

回顾(一):上一次的封装是用python自带的distutils,通过编写setup.py生成关于c++内容的python包,这次使用VS2019做配置导出python拓展包 C++代码准备 注:前期准备如(一)所示。 C++扩展包文件 C++扩展包文件是名为example的cpp和h文件,这个文件会被导出成python扩展包在python中调用,其中 C++头文件 // example.h #include "aaa.h" #include <iostream> using namespace

GEANNACAO的博客 1053

ICC2: pin shape不在track上引起的drc如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 433

PyQt5安装失败全解析:从VC++编译到.whl轮子解决方案

Python GUI开发中,C++扩展模块的编译是常见技术挑战,其核心原理在于Python需要通过绑定调用底层C/C++库。在Windows平台上,由于缺乏原生编译工具链,安装这类依赖时经常触发“Microsoft Visual C++ 14.0 or greater is required”等典型错误。这背后涉及Python包管理机制、二进制兼容性及跨语言调用等关键技术点。从工程实践角度,开发者需要掌握预编译二进制包(.whl文件)的获取与使用,同时理解MSVC编译工具链的配置逻辑。针对PyQt5这类复杂

weixin_33937499的博客 386

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python 调用 tensorflow.dll_在Windows 10 下用源码编译基于GPU的tensorflow.dll

笔者因为想尝试一些机器学习方面的idea,所以于TensorFlow产生了交集, 笔者搞计算机图形学,所以更多地与windows和visual studio打交道, 于是想在windows和visual studio环境下编译出tensorflow的gpu版本。但是整个互联网对于在windows和vs2015下编译tensorflow的信息少的可怜, 甚至在tensorflow的官方git hub...

weixin_42609225的博客 345

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: Ubuntu13.04上JDK6的安装方法
下一篇: Linux下获取目录下的文件列表,并按字符串排序
CedarDiao
博客等级 码龄19年 100粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值