1. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[Python] Using ctypes for a computation routine wrapper

Discussão em 'Python' iniciado por Stack, Outubro 3, 2024 às 19:02.

  1. Stack

    Stack Membro Participativo

    For a computation demonstration project in Linux and Python env, I need to call a C multiplication routine "matmult.c" but before I want to perform an important test if I could do another ctypes import from Windows. I have built a shared library named libdivide.so with MinGW (not MinGW-w64) and followed this post but without doing any configuration to indicate a compiler path to MinGW.

    C:\base39\frede\Cpython_win32\setup.py

    I really want to get some infos or some sites (I just read the ctypes official doc) to read to go further because my first question is: has anyone already tried this?

    building firstly the shared lib and then run
    python setup.py build_ext. In the meanwhile I will advance on Linux except if I have a return post.

    My OS is Windows 10 64 bits.

    Edit: I have installed MinGW on the root C:\ but the only time when I have tried to load a shared library from this compiler but outside msys.exe it was on another PC with Matlab R14(an eternity) and it had failed. Now I know that I would better try MinGW-w64 for R2021b but I could get the same error (below). My second question would be: do I need some extra knowledge about dll for getting this?

    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

    Many thanks

    (base39) C:\base39\frede\Cpython_win32>python setup.py build_ext

    running build_ext

    building 'divide' extension

    error: Unable to find vcvarsall.bat

    Continue reading...

Compartilhe esta Página