boost.python 与 boost.numpy安装的一些注意事项
boost.python 与 boost.numpy安装的一些注意事项
Adellbengbeng 发表于1年前
boost.python 与 boost.numpy安装的一些注意事项
  • 发表于 1年前
  • 阅读 27
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

  1. 安装boost.numpy时编译出错 出错为builtin_float_dtype<128>未定义,该函数出现在boost.numpy/libs/src/dtype.cpp中:
#if NPY_BITSOF_LONGDOUBLE > NPY_BITSOF_DOUBLE
template <> struct builtin_float_dtype< NPY_BITSOF_LONGDOUBLE > {
    static dtype get() { return DTYPE_FROM_CODE(NPY_LONGDOUBLE); }
};
template dtype get_float_dtype< NPY_BITSOF_LONGDOUBLE >();
template <> struct builtin_complex_dtype< 2 * NPY_BITSOF_LONGDOUBLE > {
    static dtype get() { return DTYPE_FROM_CODE(NPY_CLONGDOUBLE); }
};
template dtype get_complex_dtype< 2 * NPY_BITSOF_LONGDOUBLE >();
#endif

由于numpy将NPY_BITSOF_LONGDOUBLE 和NPY_BITSOF_DOUBLE定义为相同长度,所以没有创建该函数,但在test/dtype_mod.cpp中出现了:

   // floats and complex
  p::def("accept_float32", accept<float>);
  p::def("accept_complex64", accept< std::complex<float> >);
  p::def("accept_float64", accept<double>);
  p::def("accept_complex128", accept< std::complex<double> >);
  if (sizeof(long double) > sizeof(double)) {
      p::def("accept_longdouble", accept<long double>);
      p::def("accept_clongdouble", accept< std::complex<long double> >);
  }

可将它注销掉:

  // floats and complex
  p::def("accept_float32", accept<float>);
  p::def("accept_complex64", accept< std::complex<float> >);
  p::def("accept_float64", accept<double>);
  p::def("accept_complex128", accept< std::complex<double> >);
  /*if (sizeof(long double) > sizeof(double)) {
      p::def("accept_longdouble", accept<long double>);
      p::def("accept_clongdouble", accept< std::complex<long double> >);
  }*/

  1. 利用cmake编译boost.numpy时将LIBRARY_TYPE设置为SHARED,注意必须为大写

  2. 如何利用boot.python和boost.numpy编译文件? (1) 创建boost-build.jam 内容:

boost-build  "d:/boost_1_59_0/tools/build/src" ;

上面路径对应boost的tools库 (2) 创建Jamroot文件 内容:

# Copyright David Abrahams 2006. Distributed under the Boost
# Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

import python ;

if ! [ python.configured ]
{
    ECHO "notice: no Python configured in user-config.jam" ;
    ECHO "notice: will use default configuration" ;
    using python ;
}

# Specify the path to the Boost project.  If you move this project,
# adjust this path to refer to the Boost root directory.
use-project boost
  : D:/boost_1_59_0/ ;

lib boost_numpy : : <name>boost_numpy <search>. ;
# Set up the project-wide requirements that everything uses the
# boost_python library from the project whose global ID is
# /boost/python.
project
  : requirements <library>/boost/python//boost_python 
                 <library>boost_numpy
                 <implicit-dependency>/boost//headers 
  : usage-requirements <implicit-dependency>/boost//headers 
  ;

# Declare the three extension modules.  You can specify multiple
# source files after the colon separated by spaces.
python-extension wakeModel : main.cpp wakeModel.cpp ;

# Put the extension and Boost.Python DLL in the current directory, so
# that running script by hand works.
install convenient_copy 
  : wakeModel 
  : <install-dependencies>on <install-type>SHARED_LIB <install-type>PYTHON_EXTENSION 
    <location>. 
  ;

# A little "rule" (function) to clean up the syntax of declaring tests
# of these extension modules.
local rule run-test ( test-name : sources + )
{
    import testing ;
    testing.make-test run-pyd : $(sources) : : $(test-name) ;
}

# Declare test targets
#run-test wakeModel : wakeModel_ext wakeModel.py ;


(3) 运行命令:

bjam toolset=gcc release threading=multi

(4) 将libboost_python-mgw51-mt-1_59.dll和libboost_numpy.dll拷贝到当前目录,注意libboost_numpy.dll的依赖库要与libboost_python-mgw51-mt1_59.dll同名

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 4
博文 6
码字总数 1129
×
Adellbengbeng
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: