在MacOS 10.9(Mavericks)上构建Boost.Python应用程序

时间:2013-11-21 23:40:33

标签: c++ python compilation boost-python osx-mavericks

我升级到了Mavericks,现在经过多次故障排除后我无法构建我的应用程序。

在链接期间,我收到错误

Undefined symbols for architecture x86_64:
  "boost::python::objects::function_object(boost::python::objects::py_function const&, std::pair<boost::python::detail::keyword const*, boost::python::detail::keyword const*> const&)
  .
  .
  .
 "boost::python::objects::register_dynamic_id_aux(boost::python::type_info, std::pair<void*, boost::python::type_info> (*)(void*))"

我正在使用macports的g ++,特别是g ++ - mp-4.4。 Clang不是我项目的选项,因为我的项目依赖于OpenMP,而OpenMP目前与Clang不兼容。

我没有使用过C ++ 11运行时,但来自macports的Boost.Python库(我在链接时使用的那个)与它相关联。

otool -L libboost_python-mt.dylib
libboost_python-mt.dylib:
    /opt/local/lib/libboost_python-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /opt/local/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

这是我问题的根源吗?使用Clang编译我的项目的一部分成功(并阻碍了这个链接错误阶段),但正如我所提到的,我需要OpenMP。

值得注意的是,正在运行:

nm  libboost_python-mt.dylib | c++filt | grep boost::python::objects::function_object

输出

0000000000013d60 T boost::python::objects::function_object(boost::python::objects::py_function const&)
0000000000013d00 T boost::python::objects::function_object(boost::python::objects::py_function const&, std::__1::pair<boost::python::detail::keyword const*, boost::python::detail::keyword const*> const&)

有std :: __ 1个前缀,与未定义的符号错误中的预期不符...

1 个答案:

答案 0 :(得分:2)

通过安装和链接未使用c ++ 11编译的Boost版本来实现解决方案。 Macports提供的Boost版本显然用C ++ 11构建了Boost.Python,尽管事实上我特意将Macports编译器设置为g ++ - mp-4.4,它不应该用C ++ 11构建。

请注意,在撰写本文时,通过Macports安装使用g ++编译的Boost库非常困难,我最终从源代码安装了Boost库。