首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用swig和python设置编译器标志

使用swig和python设置编译器标志
EN

Stack Overflow用户
提问于 2015-10-26 13:38:19
回答 1查看 695关注 0票数 1

在我的c++代码中包含boost有问题,该代码是使用'swig‘编写的。我想把c++作为我的python的后端。

调用这两个命令

代码语言:javascript
复制
swig -c++ -python spherical_overlap.i
python setup.py build_ext --inplace

后者给出了以下错误

代码语言:javascript
复制
clang: warning: -lboost_system : 'linker' input unused
In file included from spherical_overlap_wrap.cxx:3427:
./spherical_overlap.h:8:10: fatal error: 'boost/math/special_functions/bessel.hpp' file not found
#include <boost/math/special_functions/bessel.hpp>

文件就在那里。我认为我必须为编译器设置以下标志

代码语言:javascript
复制
-I /usr/local/include

问题是,我不知道怎么做。这是我的“setup.py”文件

代码语言:javascript
复制
#!/usr/bin/env python

from distutils.core import setup, Extension


spherical_overlap_module = Extension('_spherical_overlap',
                           sources=['spherical_overlap_wrap.cxx', 'spherical_overlap.cpp'],
                           swig_opts=['-c++', '-py3'],
                           extra_compile_args =['-lboost_system '],
                           )

setup (name = 'spherical_overlap',
       version = '0.1',
       author      = "SWIG Docs",
       description = """Simple swig spherical_overlap from docs""",
       ext_modules = [spherical_overlap_module],
       py_modules = ["spherical_overlap"],
       )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-26 15:01:15

您可以执行以下任一操作:

  1. include_dirs = ['/usr/local/include'],添加到Extension构造函数调用中
  2. 将以下内容添加到setup.cfgbuild_ext include-dirs =/usr/build_ext/build_ext文件中
  3. include-dirs命令指定build_ext选项,即运行 python setup.py build_ext --inplace --包括-dirs/usr/local/build_ext
  4. -I/usr/local/include添加到CPPFLAGS环境变量,例如,运行 CPPFLAGS=“-i/usr/local/包括”python setup.py build_ext -inplace“

第二种可能是首选的方法,因为它反映了依赖于本地系统配置的选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33347189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档