2017-09-20 48 views
0

我只是在学习使用Boost.Python,所以如果它看起来很愚蠢,不好意思。 我从here这些代码包装在python中的C++函数。
我也搜索了几个小时找到一个工作的例子,最相关的问题是this,但我仍然有构建和运行的问题。使用Boost.python建立你好世界

这是zoo.cpp

#include <boost/python.hpp> 
#include <string> 

/* 
* This is the C++ function we write and want to expose to Python. 
*/ 
const std::string hello() { 
    return std::string("hello, zoo"); 
} 

/* 
* This is a macro Boost.Python provides to signify a Python extension module. 
*/ 
BOOST_PYTHON_MODULE(zoo) { 
    // An established convention for using boost.python. 
    using namespace boost::python; 

    // Expose the function hello(). 
    def("hello", hello); 
} 

visit_zoo.py

import zoo 
# In zoo.cpp we expose hello() function, and it now exists in the zoo module. 
assert 'hello' in dir(zoo) 
# zoo.hello is a callable. 
assert callable(zoo.hello) 
# Call the C++ hello() function from Python. 
print zoo.hello() 

这里是makefile文件

CC = g++ 
PYLIBPATH = $(shell python-config --exec-prefix)/lib 
LIB = -L$(PYLIBPATH) $(shell python-config --libs) -lboost_python 
OPTS = $(shell python-config --include) -O2 

default: zoo.so 
    @python ./visit_zoo.py 

zoo.so: zoo.o 
    $(CC) $(LIB) -Wl,-rpath,$(PYLIBPATH) -shared $< -o [email protected] 

zoo.o: zoo.cpp Makefile 
    $(CC) $(OPTS) -c $< -o [email protected] 

clean: 
    rm -rf *.so *.o 

.PHONY: default clean 

错误按摩:

g++ Usage: /usr/bin/python-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--configdir -O2 -c zoo.cpp -o zoo.o 
g++: error: Usage:: No such file or directory 
g++: error: missing argument to ‘--prefix’ 
/bin/sh: 1: --exec-prefix: not found 
/bin/sh: 1: --includes: not found 
/bin/sh: 1: --libs: not found 
/bin/sh: 1: --cflags: not found 
/bin/sh: 1: --ldflags: not found 
/bin/sh: 1: --extension-suffix: not found 
/bin/sh: 1: --help: not found 
/bin/sh: 1: --configdir: not found 
Makefile:13: recipe for target 'zoo.o' failed 
make: *** [zoo.o] Error 127 
+1

这有什么好做Boost.Python的,如使用线显示,'蟒蛇,配置在Makefile --include'应该是'蟒蛇,配置--includes' – Praetorian

回答

0

我用这个生成文件的工作。谢谢阅读。我得到的帮助来自here

PYTHON_VERSION = 2.7 
PYTHON_INCLUDE = /usr/include/python$(PYTHON_VERSION) 

# location of the Boost Python include files and library 

BOOST_INC = /usr/include 
BOOST_LIB = /usr/lib 

# compile mesh classes 
TARGET = zoo 

$(TARGET).so: $(TARGET).o 
    # g++ -shared -Wl,--export-dynamic $(TARGET).o -L$(BOOST_LIB) -lboost_python-$(PYTHON_VERSION) -L/usr/lib/python$(PYTHON_VERSION)/config -lpython$(PYTHON_VERSION) -o $(TARGET).so 
    g++ -shared -Wl,--export-dynamic $(TARGET).o -L$(BOOST_LIB) -lboost_python -L/usr/lib/python$(PYTHON_VERSION)/config -lpython$(PYTHON_VERSION) -o $(TARGET).so 

$(TARGET).o: $(TARGET).cpp 
    g++ -I$(PYTHON_INCLUDE) -I$(BOOST_INC) -fPIC -c $(TARGET).cpp