2017-09-28 1 views
0

Je dispose d'un fichier cythonrandom.pyx comme ceci:Puis-je utiliser la compilation dynamique de bibliothèques avec Cython en C++?

cdef public int get_random_number(): 
    return 4 

avec setup.py comme ceci:

from distutils.core import setup 
from Cython.Build import cythonize 
from distutils.extension import Extension 

extensions = [Extension("librandom", ["random.pyx"])] 
setup(
    ext_modules = cythonize(extensions) 
) 

Puis-je obtenir une bibliothèque dynamique librandom.so, maintenant je veux utiliser ce fichier so en C++ au lieu de python.

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

int main() { 
    printf("%d\n",get_random_number()); 
    return 0; 
} 

maintenant j'obtiens l'erreur comme ça quand je compile g++ -o main main.cpp -lrandom -L. -Wl,-rpath,"\$ORIGIN":

In file included from main.cpp:2:0: 
random.h:26:1: error: ‘PyMODINIT_FUNC’ does not name a type 
PyMODINIT_FUNC initrandom(void); 
+1

Vous devrez ajouter python-comprend ainsi que la bibliothèque de python à votre build, aussi vous ne pouvez pas utiliser la fonctionnalité du module cython sans innitializing premier. Cette réponse comble le vide du tutoriel Cython et peut vous être utile: https://stackoverflow.com/a/45424720/5769463 – ead

Répondre