Использование ctypes для оболочки подпрограммы вычислений ⇐ Python

Программы на Python
Anonymous
Использование ctypes для оболочки подпрограммы вычислений

Сообщение Anonymous »

Для проекта демонстрации вычислений в среде Linux и Python мне нужно вызвать процедуру умножения C «matmult.c», но прежде чем я захочу выполнить важный тест, могу ли я выполнить еще один импорт ctypes из Windows. Я создал общую библиотеку с именем libdivide.so с помощью MinGW (не MinGW-w64) и следил за этим сообщением, но не выполнял никаких настроек, чтобы указать путь компилятора к MinGW.
C:\base39 \frede\Cpython_win32\setup.py
Я действительно хочу получить некоторую информацию или несколько сайтов (я только что прочитал официальный документ ctypes), чтобы прочитать их, чтобы идти дальше, потому что мой первый вопрос: есть ли кто-нибудь уже пробовал это?
сначала собираем общую библиотеку, а затем запускаем

python setup.py build_ext. Тем временем я буду продвигаться по Linux, за исключением случаев, когда у меня будет ответное сообщение.
Моя ОС — 64-разрядная версия Windows 10.
Редактировать: у меня есть установил MinGW в корень C:\, но единственный раз, когда я пытался загрузить общую библиотеку из этого компилятора, но вне msys.exe, это было на другом компьютере с Matlab R14 (вечность), и это не удалось. Теперь я знаю, что мне лучше попробовать MinGW-w64 для R2021b, но я могу получить ту же ошибку (ниже). Мой второй вопрос: нужны ли мне дополнительные знания о dll, чтобы получить это?

Код: Выделить всё

from distutils.core import setup, Extension
setup(name='divide',
version='1.0',
description='Python extension package for demo',
ext_modules=[Extension('divide', ['dividefunc.c'],include_dirs=['include'])],
packages=[''],
# fred yhe package is assumed to be at the root
package_dir={'': 'lib'},
#package_data = unused here
)

Код: Выделить всё

import ctypes
lib = ctypes.cdll.LoadLibrary('divide.so')  #not sure

def divide_modulo(a,b):
div=ctypes.c_int(0)
rest=ctypes.c_int(0)
lib.divide_int(a,b, ctypes.byref(div), c_types.byref(rest))
return (div.value, rest.value)

#class DynamicArray(ctypes.Structure):
#   _fields_ = [("n", ctypes.c_int), ("r", ctypes.POINTER(c_types.c_int))]
./include/dividefunc.h

./lib/libdivide.so

./source/
./setup.py

./dividepy.py
Большое спасибо
(base39) C: \base39\frede\Cpython_win32>python setup.py build_ext
запуск build_ext
создание расширения «divide»
ошибка: не удалось найти vcvarsall.bat

Подробнее здесь: https://stackoverflow.com/questions/790 ... ne-wrapper

Вернуться в «Python»