OSError:异常:使用Cyphon基本示例的访问冲突读取

时间:2019-05-15 10:22:47

标签: python c++ python-3.x anaconda cygwin

我只是按照Calling C/C++ from Python?上的简单教程进行操作,您可以从原始答案那里复制粘贴代码,然后在这里放一张图片作为说明:

enter image description here

创建这些文件后,我使用以下命令构建了项目:

User@User-PC$ g++ --version (from Cygwin)
g++ (GCC) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

User@User-PC$ g++ -c -fPIC foo.cpp -o foo.o
User@User-PC$ g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o

user@user-PC$ ll
total 162
drwx---r-x+ 1 user None      0 2019-05-15 06:59:29.850994400 -0300 ./
-rwx---r-x+ 1 user None    235 2019-05-15 06:59:02.791270500 -0300 foo.cpp*
-rw-r--r--+ 1 user None   3362 2019-05-15 06:58:54.335017300 -0300 foo.o
-rwx---r-x+ 1 user None    260 2019-05-15 06:59:40.159723600 -0300 foowrapper.py*
-rwxr-xr-x+ 1 user None 137902 2019-05-15 06:59:04.920040300 -0300 libfoo.so*

User@User-PC$ python3 foowrapper.py
Traceback (most recent call last):
  File "foowrapper.py", line 12, in <module>
    f.bar() #and you will see "Hello" on the screen
  File "foowrapper.py", line 9, in bar
    lib.Foo_bar(self.obj)
OSError: exception: access violation reading 0x000000636F6C6C61

User@User-PC$ python3 --version (from Windows) https://www.anaconda.com/distribution/
Python 3.7.2

User@User-PC$ python2 --version (from Cygwin)
Python 2.7.16

User@User-PCpython2 foowrapper.py
Hello

User@User-PC$

我正在使用Cygwin g++构建它,我们可以看到,如果我使用Windows Native Python运行它,它将抛出异常OSError: exception: access violation reading,但是如果我使用Cygwin Python,则可以正常工作

为什么Windows Python会抛出此类异常?它可以修复吗,所以我可以用Cygwin g++来构建它,然后用Windows Native Python编译器运行它?

1 个答案:

答案 0 :(得分:1)

这很可能是因为您在Cygwin中编译的代码取决于Cygwin DLL(cygwin1.dll)。只要该DLL处于路径中,您仍可以在Windows下运行它,但是由于Cygwin处理路径的方式可能会产生有趣的效果。如果要编译不依赖Cygwin DLL的应用程序或dll,则需要在Cygwin中使用MinGW编译器。您可能没有安装那些。重新运行安装程序,然后查找名为以下名称的软件包:mingw-x86[_64]-gcc-*。您仍将以类似的方式创建DLL,但是将使用mingw版本的gcc。