所以我设置了一个c ++类,比如class.cpp,class.h。 class.cpp使用gsl中的一些函数(它有#include <gsl/gsl_blas.h>
)
我没有问题将它链接到另一个c ++文件main.cpp,我可以用
g++ -o main main.o class.o -I/home/gsl/include -lm -L/home/gsl/lib -lgsl -lgslcblas
此外,如果不在class.cpp中包含gsl库,我已经设法创建了一个在class.cpp中使用我的类的cython文件,它可以工作。
然而,当我尝试组合这两个(即在cython中使用c ++类,c ++类使用gsl函数)时,我不知道该怎么做。我想我必须包括
I/home/gsl/include -lm -L/home/gsl/lib -lgsl -lgslcblas
在安装文件中的某个地方,但我不知道在哪里或如何。我的setup.py看起来像
from distutils.core import setup
from Cython.Build import cythonize
import os
os.environ["CC"] = "g++"
os.environ["CXX"] = "g++"
setup(
name = "cy",
ext_modules = cythonize('cy.pyx'),
)
我有
# distutils: language = c++
# distutils: sources = class.cpp
在我的.pyx文件的开头。
感谢您的帮助!
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用libraries
类的include_dirs
,library_dirs
和Extension
参数指定所需的外部库。例如:
from distutils.extension import Extension
from distutils.core import setup
from Cython.Build import cythonize
import numpy
myext = Extension("myext",
sources=['myext.pyx', 'myext.cpp'],
include_dirs=[numpy.get_include(), '/path/to/gsl/include'],
library_dirs=['/path/to/gsl/lib'],
libraries=['m', 'gsl', 'gslcblas'],
language='c++',
extra_compile_args=["-std=c++11"],
extra_link_args=["-std=c++11"])
setup(name='myproject',
ext_modules=cythonize([myext]))
这里,C ++类在myext.cpp
和myext.pyx
中的cython接口中定义。另见:Cython Documentation