2017-09-28 3 views
0

私はこのようなcythonファイルrandom.pyxあります。その後、私は今、私はCで、このsoファイルを使用する場合は、動的ライブラリlibrandom.soを得る++の代わりに、C++でcythonで動的ライブラリコンパイルを使用できますか?

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) 
) 

:このようなsetup.py

cdef public int get_random_number(): 
    return 4 

をPython。私はg++ -o main main.cpp -lrandom -L. -Wl,-rpath,"\$ORIGIN"をコンパイルするとき

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

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

今私はこのようなエラーが出る:にあなたのCコードを変更する

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

を参照してください、また、それを最初にinnitializingせずcythonモジュールの機能を使用することはできません。その答えは、cythonチュートリアルのギャップを埋め、あなたに役立つかもしれません:https://stackoverflow.com/a/45424720/5769463 – ead

答えて

1

てみてください。実行可能ファイルを実行するための

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

int main() { 
    Py_Initialize(); 
    PyInit_random(); // see "random.h" 
    int r = get_random_number(); 
    Py_Finalize(); 
    printf("%d\n", r); 
    return 0; 
} 

注意を、あなたが取得することはできませんPython環境を取り除く。

また、あなたのビルドに含まれるのpython-だけでなく、Pythonライブラリを追加する必要がありますHow to import Cython-generated module from python to C/C++ main file? (programming in C/C++)

関連する問題