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

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



这两天尝试使用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,我就没时间去深究了。

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值