首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >anaconda cythonize Windows10上的C++

anaconda cythonize Windows10上的C++
EN

Stack Overflow用户
提问于 2018-08-18 05:55:50
回答 2查看 603关注 0票数 0

我有c++代码,编译良好的MSVS2015,这是安装在我的PC。我的任务是使用cython创建一个python扩展,以便能够从我们的python应用程序调用c++函数。我已经安装了anaconda 5.2和/ cython。c++有一堆在编译时需要包含的头文件。我正在尝试构建一个函数,但遇到了同样的错误。

对于一个函数,我的test.pyx如下所示:

代码语言:javascript
复制
cimport test
cimport cython
def pxd_PIXCIclose():
    res = test.pxd_PIXCIclose()
    return res

test.pxd如下:

代码语言:javascript
复制
cdef extern from "D:\epix\inc\xcliball.h":  
int pxd_PIXCIclose()

setup.py是:

代码语言:javascript
复制
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

ext_modules = Extension(
                name = "test",
                sources=["test.pyx"],
                include_dirs=["D:\epix\lib", "D:\epix\inc"],  
                library_dirs="D:\epix\inc\XCLIBW64.lib","D:\epix\lib\PXIPLW64.lib"]
              )

setup(
  name = "test.pyx",
  ext_modules = cythonize([ext_modules])
)

创建了test.c,但随后在C++ include文件夹中的头文件中出现了一系列构建错误:

代码语言:javascript
复制
python setup.py build_ext --inplace --compiler=msvc

Compiling test.pyx because it depends on .\test.pxd.
[1/1] Cythonizing test.pyx
running build_ext
building 'test' extension

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe 
/c /nologo /Ox /W3 /GL /DNDEBUG /MD -ID:\epix\lib -ID:\epix\inc - 
IC:\Anaconda3\include -IC:\Anaconda3\include "-IC:\Program Files 
(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files 
(x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files 
(x86)\Windows Kits\10\include\10.0.10586.0\ucrt" "-IC:\Program Files 
(x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files 
(x86)\Windows Kits\10\include\10.0.10586.0\shared" "-IC:\Program Files 
(x86)\Windows Kits\10\include\10.0.10586.0\um" "-IC:\Program Files 
(x86)\Windows Kits\10\include\10.0.10586.0\winrt" /Tctest.c 
/Fobuild\temp.win-amd64-3.6\Release\test.obj
test.c

d:\epix\inc\pxlibsv.h(312): error C2061: syntax error: identifier 'HANDLE'
d:\epix\inc\pxlibsv.h(317): error C2059: syntax error: '}'
d:\epix\inc\pxlibsv.h(827): error C2143: syntax error: missing ')' before 
'*'
d:\epix\inc\pxlibsv.h(827): error C2081: 'HANDLE': name in formal parameter 
list illegal
d:\epix\inc\pxlibsv.h(827): error C2143: syntax error: missing ';' before 
'*'
d:\epix\inc\pxlibsv.h(827): error C2059: syntax error: '*'
.
.
.
d:\epix\inc\xclibsc.h(369): fatal error C1003: error count exceeds 100; 
stopping compilation
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 
14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2

我猜我的setup.py是不是错了?有谁对正在发生的事情有什么建议吗?

更新我最初的帖子,添加#include windows.h,原来的'HANDLE‘错误现在消失了,但我现在收到了这个链接错误:

代码语言:javascript
复制
(base) d:\epix\cython>python setup.py build_ext --inplace --compiler=msvc
running build_ext
building 'test' extension
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe 
/c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Anaconda3\include -ID:\epix\lib - 
ID:\epix\inc -IC:\Anaconda3\include -IC:\Anaconda3\include "-IC:\Program 
Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files 
(x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files 
(x86)\Windows Kits\10\include\10.0.10586.0\ucrt" "-IC:\Program Files 
(x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files 
(x86)\Windows Kits\10\include\10.0.10586.0\shared" "-IC:\Program Files 
(x86)\Windows Kits\10\include\10.0.10586.0\um" "-IC:\Program Files 
(x86)\Windows Kits\10\include\10.0.10586.0\winrt" /Tctest.c 
/Fobuild\temp.win-amd64-3.6\Release\test.obj
test.c
C:\Program Files (x86)\Microsoft Visual Studio 
14.0\VC\BIN\x86_amd64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL 
/MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\Anaconda3\Lib 
/LIBPATH:D:\epix\inc\XCLIBW64.lib /LIBPATH:D:\epix\lib\PXIPLW64.lib 
/LIBPATH:C:\Anaconda3\libs /LIBPATH:C:\Anaconda3\PCbuild\amd64 
"/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" 
"/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 
14.0\VC\ATLMFC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Windows 
Kits\10\lib\10.0.10586.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows 
Kits\NETFXSDK\4.6.1\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows 
Kits\10\lib\10.0.10586.0\um\x64" /EXPORT:PyInit_test build\temp.win-amd64- 
3.6\Release\test.obj /OUT:d:\epix\cython\test.cp36-win_amd64.pyd 
/IMPLIB:build\temp.win-amd64-3.6\Release\test.cp36-win_amd64.lib
test.obj : warning LNK4197: export 'PyInit_test' specified multiple times; 
using first specification
Creating library build\temp.win-amd64-3.6\Release\test.cp36-win_amd64.lib 
and object build\temp.win-amd64-3.6\Release\test.cp36-win_amd64.exp
test.obj : error LNK2001: unresolved external symbol pxd_PIXCIclose
d:\epix\cython\test.cp36-win_amd64.pyd : fatal error LNK1120: 1 unresolved 
externals error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 
14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1120

对解决这个错误有什么建议吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-08-21 00:56:52

根据编译器输出,未定义句柄。你知道吗,用VS2015你需要添加路径到SDK?正如我所看到的,它没有被包括在内。将C:\Program Files (x86)\Windows Kits\10 \ include\ platformtoolset\um添加到路径中。Platformtoolset将在您的包含路径中定义子文件夹。希望能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2018-08-21 22:46:40

将#include windows.h添加到我的标题中,然后将原始setup.py更改为以下内容:

代码语言:javascript
复制
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize


ext_modules = Extension(
          name = "test",
          sources=["test.pyx"],

          include_dirs=["D:\epix\lib", "D:\epix\inc"],
          library_dirs=["D:\epix\inc"],
          libraries=["XCLIBW64", "PXIPLW64"]

          )

setup(
name = "test.pyx",
ext_modules = cythonize([ext_modules])

我成功地实现了c项目中的一个函数。感谢所有给我提供建议并为我指明了正确方向的人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51903324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档