对boost :: python :: detail :: init_module和朋友的未定义引用

时间:2014-10-12 18:19:38

标签: c++ eclipse boost boost-python

我试图在官方网站上用示例测试boost python。 但它引发了很多错误...... 以下是我所做的和错误。

  1. 使用this下载Boost1.55。
  2. Eclipse库搜索路径添加到“usr / includ”(此处提升目录位置)
  3. 添加库标志-lpython2.7(已安装Python2.7)
  4. 添加包含路径usr/include/python2.7(在我第一次尝试时,错误发生:找不到pyconfig.h
  5. 这是我的测试代码,并且错误,测试代码只是看看是否使用boost python正常编译。

    #include <iostream>
    #include <boost/python.hpp>
    
    char const* greet()
    {
       return "hello, world";
    }
    
    BOOST_PYTHON_MODULE(hello_ext)
    {
        using namespace boost::python;
        def("greet", greet);
    }
    
    int main(){
        std::cout << "aaa" << std::endl;
    }
    

    。 在eclipse中用redline表示的Error部分是BOOST_PYTHON_MODULE(hello_ext)

    **** Build of configuration Debug for project tsetBoost ****
    
    make all 
    Building file: ../main.cpp
    Invoking: GCC C++ Compiler
    g++ -I/usr/include/python2.7 -O0 -g3 -Wall -c -fmessage-length=0 -std=c++0x -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp"
    Finished building: ../main.cpp
    
    Building target: tsetBoost
    Invoking: GCC C++ Linker
    g++ -L/usr/include -o"tsetBoost"  ./main.o   -lpython2.7
    ./main.o: In function `inithello_ext':
    /home/kim/workspace/tsetBoost/Debug/../main.cpp:16: undefined reference to `boost::python::detail::init_module(char const*, void (*)())'
    ./main.o: In function `boost::python::type_info::name() const':
    /usr/local/include/boost/python/type_id.hpp:165: undefined reference to `boost::python::detail::gcc_demangle(char const*)'
    ./main.o: In function `boost::python::to_python_value<char const* const&>::operator()(char const* const&) const':
    /usr/local/include/boost/python/converter/builtin_converters.hpp:161: undefined reference to `boost::python::converter::do_return_to_python(char const*)'
    ./main.o: In function `void boost::python::def<char const* (*)()>(char const*, char const* (*)())':
    /usr/local/include/boost/python/def.hpp:91: undefined reference to `boost::python::detail::scope_setattr_doc(char const*, boost::python::api::object const&, char const*)'
    ./main.o: In function `boost::python::api::object boost::python::detail::make_function_aux<char const* (*)(), boost::python::default_call_policies, boost::mpl::vector1<char const*> >(char const* (*)(), boost::python::default_call_policies const&, boost::mpl::vector1<char const*> const&)':
    /usr/local/include/boost/python/make_function.hpp:38: undefined reference to `boost::python::objects::function_object(boost::python::objects::py_function const&)'
    ./main.o: In function `py_function_impl_base':
    /usr/local/include/boost/python/object/py_function.hpp:20: undefined reference to `vtable for boost::python::objects::py_function_impl_base'
    ./main.o:(.rodata._ZTVN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEEE[vtable for boost::python::objects::caller_py_function_impl<boost::python::detail::caller<char const* (*)(), boost::python::default_call_policies, boost::mpl::vector1<char const*> > >]+0x30): undefined reference to `boost::python::objects::py_function_impl_base::max_arity() const'
    ./main.o: In function `~caller_py_function_impl':
    /usr/local/include/boost/python/object/py_function.hpp:30: undefined reference to `boost::python::objects::py_function_impl_base::~py_function_impl_base()'
    ./main.o:(.rodata._ZTIN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEEE[typeinfo for boost::python::objects::caller_py_function_impl<boost::python::detail::caller<char const* (*)(), boost::python::default_call_policies, boost::mpl::vector1<char const*> > >]+0x10): undefined reference to `typeinfo for boost::python::objects::py_function_impl_base'
    ./main.o: In function `boost::python::converter::expected_pytype_for_arg<char const*>::get_pytype()':
    /usr/local/include/boost/python/converter/pytype_function.hpp:68: undefined reference to `boost::python::converter::registry::query(boost::python::type_info)'
    /usr/local/include/boost/python/converter/pytype_function.hpp:69: undefined reference to `boost::python::converter::registration::expected_from_python_type() const'
    collect2: ld returned 1 exit status
    make: *** [tsetBoost] ERROR 1
    

1 个答案:

答案 0 :(得分:4)

我为增强添加了两个额外的标志然后它可以工作!!

-lboost_python -lboost_system