This is some notes for my test. I started with the sample in the tutorial libs/python/example/tutorial. It is fine to ruin bjam in that folder. Nevertheless, if the folder is copied to other place, bjam cannot work. Instead, I need to use b2 with additional options. Essentially, I need to specify the toolset and the root of boost source code. b2 -sBOOST_ROOT=F:\software\boost_1_53_0 --toolset=msvc-10.0 NOTE
#include <boost/python/module.hpp> #include <boost/python/def.hpp> double test(int a, int b) { return (double)(a + b); } BOOST_PYTHON_MODULE(test_module) { using namespace boost::python; def<double(int, int)>("test_func", test); } The python code that call this function will look like this: import test_module print test_module.test_func(1, 2) The Jamroot (modified from the sample in the sample code of boost. The path is <boost_source_dir>/libs/python/example/tutorial. The credit belongs to by David Abrahams.) # 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) # Modified by Teng-Yok Lee on 04/17/2013. 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 : F:/software/boost_1_53_0 ; # 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 : requirements <include>D:/mylib/install/vc2010/x64/include : requirements <include>D:/lib/install/vc2010/x64/include ; # Declare the extension module. You can specify multiple # source files after the colon separated by spaces. # Format: python-extension <module_name> : <module_source> ; python-extension test_module : module_py.cpp ; # Put the extension and Boost.Python DLL in the current directory, so # that running script by hand works. install convenient_copy : test_module : <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 test_test : test_module test_module.py ; http://www.boost.org/doc/libs/1_53_0/libs/python/doc/tutorial/doc/html/index.html PS. A good article about passing arrays from Python to C: http://stackoverflow.com/questions/10651912/pass-python-list-to-c-extension-using-boost-python |
Memo-migrated >