我升级到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库.