2017-07-26 2 views
0

Je suis en train d'appeler du code Python en C avec ce code:Appel fonction Python-3 en C

#include <stdio.h> 
#include <Python.h> 

int main() 
{ 
    PyObject* pInt; 

    Py_Initialize(); 

    PyRun_SimpleString("print('This is Python in C')"); 

    Py_Finalize(); 

    printf("\n"); 
    return 0; 
} 

et ont essayé de le compiler avec cette commande:

gcc python_test_in_c.c 

Cependant, il renvoie un erreur renvoie en disant:

undefined referance to `__imp __Py_Initialise` 
undefined referance to `__imp__PyRun_SimpleSringFlags` 
undefined referance to `__imp__Py_Finalise` 
collect2.exe: error: ld returned 1 exit status 

Qu'est-ce qui ne va pas? Comment puis-je réparer cela?

Toute aide serait appréciée

PS Je ne suis pas sûr, mais cela pourrait être quelque chose à voir avec le fait que je copié le fichier Python « include » (contenant Python.h) dans le fichier include pour MinGW situé C:/MinGW

MISE À JOUR: J'ai maintenant appris que c'est ok à faire mais considéré comme une mauvaise pratique.

+1

Vous n'avez pas lié la bibliothèque. – litelite

+0

S'il vous plaît modifier le titre! Cela n'a aucun sens et est simplement trompeur. Vous ne "incorporez pas de code Python en C". Vous appelez simplement des fonctions de l'API Python C. Ce n'est pas différent de toute autre bibliothèque. – Olaf

+0

@Olaf techniquement cela ressemble à l'intégration à moi, voir 'PyRun_SimpleString (" print ('Ceci est Python en C') ");'. Il est intégré via une API de bibliothèque. –

Répondre

2

Vous n'êtes pas la liaison avec la bibliothèque python ...

essayer:

gcc python_test_in_c.c -lpython3.6m 

changement 3.6 à votre version de choix ...

+0

J'ai essayé cela mais il renvoie une erreur disant qu'il ne peut pas trouver lpython3.6m le chemin sur mon ordinateur pour python est C: \ Utilisateurs \ Simon \ AppData \ Local \ Programmes \ Python \ Python36-32 – Simon

+1

essayer d'ajouter -LC: \ Utilisateurs \ Simon \ AppData \ Local \ Programmes \ Python \ Python36-32 \ libs –

+0

Résolu! Compilé avec gcc python_test_in_c.c -lpython36 a ajouté la DLL python36 avec l'exe et cela fonctionne. Le . (point) et m dans python3.6m génère une erreur, supprimez-les et cela fonctionne.Merci pour l'aide tout le monde. – Simon