Je dispose d'un fichier cython
random.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);
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