Programa C compilado con Cygwin y llamado desde Python Hangs

Estoy tratando de llamar a un programa c desde Python usandoctypes. Tengo un ejemplo mínimo (no) de trabajo a continuación.

Programa C

Aquí está el programa C al que intento llamar. Solo su programa estándar hello world. Compilo esto, en Windows, usando eclipse y el compilador cygwin gcc para producir un.dll archivo.

main.h

#ifndef INC_MAIN_H_
#define INC_MAIN_H_

void helloWorld();

unsigned char buf[] = "Hello World!";

#endif /* INC_MAIN_H_ */

C Principal

#include <stdio.h>
#include "main.h"

void helloWorld(){
    printf("\n%s\n\n", buf);
}
Programa Python

Luego escribo un script de Python para cargar mi.dll y llama alhelloWorld función. Es importante destacar que detengo tanto el.dll Yo creé y elcygwin1.dll.

helloWorld.py

from ctypes import CDLL
import os

def loadDLL(file):
    file = file.replace('\\','/')
    if not os.path.exists(file):
        raise FileNotFoundError(file)

    print('Opening DLL File:', file)
    dll = CDLL(file)

    return dll

if __name__ == '__main__':
    dll = loadDLL(FILE_TO_LOAD)
    dll.helloWorld()

Cuando voy a ejecutar este programa,loadDLL funciona bien y carga la DLL. Sin embargo, llamando alhelloWorld La función del programa c hace que se cuelgue.

Por extraño que parezca, si reemplazo elprintf alinearse con algo inocuo (por ejemplo,int x = 0), se ejecuta bien pero imprime un número aparentemente aleatorio.

¿Alguien puede señalarme lo que estoy haciendo mal? ¿O incluso una forma de descubrir qué está pasando?

Por cierto, pude obtener una configuración casi idéntica para funcionar bien en un sistema Linux, así que supongo que se debe al entorno de Windows que configuré, pero no pude comenzar a adivinar qué es realmente.

ACTUALIZAR

No escribo esto como respuesta porque no resuelve la letra del problema, sino solo el espíritu.

ASugerencia de Jean-Francois Fabre Dejé a Cygwin por mingw y ahora las cosas funcionan como se esperaba. Aparentemente, Cygwin trabaja de formas extrañas.Ahmed Masud fue capaz de encontrarun enlace útil sobre cómo se deben compilar los programas de cygwin si se van a usar para bibliotecas externas, pero eso parecía mucho más problemático que simplemente usar mingw (sin mencionar los otros problemas que ya había encontrado al tratar de usar cygwin para esto).

FWIW, este programa también debe ejecutarse en la línea de comando para ver la salida del programa c. Correr en IDLE de python no capturó elprintf salida del programa c.

Respuestas a la pregunta(1)

Su respuesta a la pregunta