我正在尝试构建受here启发的示例
我的初衷是能够从Python内部调用C ++代码。我只是运行Boost文档中的示例以实现此目标。
这是我的makefile
CXX := g++
CXX_FLAGS := -Wall -Wextra -std=c++17 -ggdb
BIN := bin
SRC := src
INCLUDE := inc
LIB := lib
BOOST_ROOT := /home/eicossa/repo/boost_install
BOOST_INCL := ${BOOST_ROOT}/include/
BOOST_LIBS := ${BOOST_ROOT}/libs/
PYTHON_INCL := /usr/include/python3.7m/
PYTHON_LIBS := /usr/lib/python3.7/
LIBFLAGS := -lboost_system
EXECUTABLE := greet
all: $(BIN)/$(EXECUTABLE)
run: clean all
clear
./$(BIN)/$(EXECUTABLE)
$(BIN)/$(EXECUTABLE): $(SRC)/*.cpp
$(CXX) $(CXX_FLAGS) -I$(PYTHON_INCL) -I$(INCLUDE) -I$(BOOST_INCL) -L$(BOOST_LIBS) -L$(PYTHON_LIBS) -L$(LIB$
clean:
-rm $(BIN)/*
这会导致以下错误
/tmp/ccNVjFX3.o:在函数
boost::python::api::object::object()': /home/eicossa/repo/boost_install/include/boost/python/object_core.hpp:400: undefined reference to
_ Py_NoneStruct'中/tmp/ccQNpbxG.o:在函数中PyInit_hello_ext': /home/eicossa/Dropbox/wtcd/license/boost/src/bindings.cpp:3: undefined reference to
boost :: python :: detail :: init_module(PyModuleDef&,无效 ()())'/tmp/ccQNpbxG.o:在函数boost::python::type_info::name() const': /home/eicossa/repo/boost_install/include/boost/python/type_id.hpp:160: undefined reference to
中的boost :: python :: detail :: gcc_demangle(char const )'/tmp/ccQNpbxG.o:在函数中boost::python::to_python_value<char const* const&>::operator()(char const* const&) const': /home/eicossa/repo/boost_install/include/boost/python/converter/builtin_converters.hpp:157: undefined reference to
boost :: python :: converter :: do_return_to_python(char const *)' /tmp/ccQNpbxG.o:在函数boost::python::to_python_value<char const* const&>::get_pytype() const': /home/eicossa/repo/boost_install/include/boost/python/converter/builtin_converters.hpp:157: undefined reference to
PyUnicode_Type'中/tmp/ccQNpbxG.o:在函数中void boost::python::def<char const* (*)()>(char const*, char const* (*)())': /home/eicossa/repo/boost_install/include/boost/python/def.hpp:91: undefined reference to
boost :: python :: detail :: scope_setattr_doc(char const *,boost :: python :: api :: object const&,char const *)' /tmp/ccQNpbxG.o:在函数`boost :: python :: api :: object中 boost :: python :: detail :: make_function_aux(char const *(*)(),boost :: python :: default_call_policies const&,boost :: mpl :: vector1 const&)': /home/eicossa/repo/boost_install/include/boost/python/make_function.hpp:38: 未定义的引用
boost::python::objects::function_object(boost::python::objects::py_function const&)' /tmp/ccQNpbxG.o: In function
boost :: python :: objects :: py_function_impl_base :: py_function_impl_base()': /home/eicossa/repo/boost_install/include/boost/python/object/py_function.hpp:20: 对vtable for boost::python::objects::py_function_impl_base' /tmp/ccQNpbxG.o:(.rodata._ZTVN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEEE[_ZTVN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEEE]+0x30): undefined reference to
boost :: python :: objects :: py_function_impl_base :: max_arity()const的未定义引用” /tmp/ccQNpbxG.o:在功能中boost::python::objects::caller_py_function_impl<boost::python::detail::caller<char const* (*)(), boost::python::default_call_policies, boost::mpl::vector1<char const*> > >::~caller_py_function_impl()': /home/eicossa/repo/boost_install/include/boost/python/object/py_function.hpp:30: undefined reference to
boost :: python :: objects :: py_function_impl_base ::〜py_function_impl_base()' /tmp/ccQNpbxG.o:(.rodata._ZTIN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEEE[_ZTIN5boost6python7对象_call_py_EE_EE_EE_EE_IP_6_EE_EE_EE_IP_6_EE1_EP_6_EE_IP_6_EE1_IE_EE_EE_IP_6_7 对typeinfo for boost::python::objects::py_function_impl_base' /tmp/ccQNpbxG.o: In function
boost :: python :: converter :: expected_pytype_for_arg :: get_pytype()'的未定义引用: /home/eicossa/repo/boost_install/include/boost/python/converter/pytype_function.hpp:69: 未定义的引用boost::python::converter::registry::query(boost::python::type_info)' /home/eicossa/repo/boost_install/include/boost/python/converter/pytype_function.hpp:70: undefined reference to
boost :: python :: converter :: registration :: expected_from_python_type() const'collect2:错误:ld返回1退出状态Makefile:27:配方 目标“ bin / greet”失败的原因:*** [bin / greet]错误1
我在做什么错了?
答案 0 :(得分:0)
CXX := g++
CXX_FLAGS := -Wall -Wextra -std=c++17 -ggdb
BIN := bin
SRC := src
INCLUDE := inc
LIB := lib
BOOST_ROOT := /home/eicossa/repo/boost_install
BOOST_INCL := ${BOOST_ROOT}/include/
BOOST_LIBS := ${BOOST_ROOT}/libs/
PYTHON_INCL := /usr/include/python3.7m/
PYTHON_LIBS := /usr/lib/python3.7/
LIBFLAGS := -lboost_system -lboost_python37 -lpython3.7m #changes made here
EXECUTABLE := greet
all: $(BIN)/$(EXECUTABLE)
run: clean all
clear
./$(BIN)/$(EXECUTABLE)
$(BIN)/$(EXECUTABLE): $(SRC)/*.cpp
$(CXX) $(CXX_FLAGS) -I$(PYTHON_INCL) -I$(INCLUDE) -I$(BOOST_INCL) -L$(BOOST_LIBS) -L$(PYTHON_LIBS) -L$(LIB$
clean:
-rm $(BIN)/*
尝试在Makefile中进行这些更改