[转载] boost python numpy_boost.python 与 boost.numpy安装的一些注意事项

参考链接: Python中的numpy.put

安装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);

 p::def("accept_complex64", accept< std::complex >);

 p::def("accept_float64", accept);

 p::def("accept_complex128", accept< std::complex >);

 if (sizeof(long double) > sizeof(double)) {

 p::def("accept_longdouble", accept);

 p::def("accept_clongdouble", accept< std::complex >);

 }

 可将它注销掉:

 // floats and complex

 p::def("accept_float32", accept);

 p::def("accept_complex64", accept< std::complex >);

 p::def("accept_float64", accept);

 p::def("accept_complex128", accept< std::complex >);

 /*if (sizeof(long double) > sizeof(double)) {

 p::def("accept_longdouble", accept);

 p::def("accept_clongdouble", accept< std::complex >);

 }*/

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

 如何利用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 : : boost_numpy . ;

 # Set up the project-wide requirements that everything uses the

 # boost_python library from the project whose global ID is

 # /boost/python.

 project

 : requirements /boost/python//boost_python

 boost_numpy

 /boost//headers

 : usage-requirements /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

 : on SHARED_LIB PYTHON_EXTENSION

 .

 ;

 # 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同名

猜你喜欢

转载自blog.csdn.net/u013946150/article/details/113078354