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

我升级到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前缀,与未定义符号错误中的预期不符…

解决方法:

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

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

上一篇:将python代码编译为单个exe


下一篇:c# – .Net接口继承编译