Ошибка OSE: исключение: чтение с нарушением прав доступа на базовом примере Cyphon - PullRequest
0 голосов
/ 15 мая 2019

Я только что следовал простому руководству по Вызову C / C ++ из 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 Ответ

1 голос
/ 15 мая 2019

Скорее всего, это потому, что ваш код, скомпилированный в Cygwin, зависит от Cygwin DLL (cygwin1.dll).Вы по-прежнему можете запускать это под Windows, пока эта DLL находится на вашем пути, но могут быть интересные эффекты из-за того, как Cygwin обрабатывает пути.Если вы хотите скомпилировать приложение или DLL, которые не зависят от Cygwin DLL, вам нужно будет использовать компиляторы MinGW в Cygwin.Вы, вероятно, не установлены.Перезапустите программу установки и найдите пакеты с такими именами: mingw-x86[_64]-gcc-*.Вы по-прежнему будете создавать свою DLL аналогичным образом, но вы будете использовать версию gcc для mingw.

...