【问题标题】:Link error with boost-python installed by macports on MavericksMacports 在 Mavericks 上安装的 boost-python 链接错误
【发布时间】:2014-02-13 15:37:02
【问题描述】:

我升级到maverics,现在macports版本的boost-python不能用了。

我安装了端口:gcc48 和 boost +python33。

我尝试用 c++11 或不使用 c++11 编译这个程序:

#include <boost/python.hpp>
class A {};
BOOST_PYTHON_MODULE(libblah) {
  boost::python::class_<A>("A");
}

我使用了 cmake,但生成的构建命令以及我得到的链接器错误如下:

[100%] Building CXX object CMakeFiles/a.dir/a.cc.o
g++   -Da_EXPORTS -std=gnu++0x -save-temps=obj -arch x86_64 -fPIC -I/Users/neil/nn/src -I/opt/local/include -I/opt/local/include/freetype2 -I/opt/local/Library/Frameworks/Python.framework/Headers -F/usr/local/Qt-5.2.0/lib -I/usr/local/Qt-5.2.0/lib/QtCore.framework/Headers -I/usr/local/Qt-5.2.0/mkspecs/macx-clang -I/usr/local/Qt-5.2.0/lib/QtGui.framework/Headers -I/System/Library/Frameworks/OpenGL.framework/Headers -I/usr/local/Qt-5.2.0/lib/QtOpenGL.framework/Headers -I/usr/local/Qt-5.2.0/lib/QtWidgets.framework/Headers -I/opt/local/Library/Frameworks/Python.framework/Versions/3.3/include/python3.3m -I/Users/neil/nn/src/.    -o CMakeFiles/a.dir/a.cc.o -c /Users/neil/nn/src/a.cc
Linking CXX shared module liba.so
g++   -std=gnu++0x -save-temps=obj -arch x86_64 -bundle -Wl,-headerpad_max_install_names   -o liba.so CMakeFiles/a.dir/a.cc.o  -L/opt/local/lib  -L/Users/neil/nn/src /opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/libpython3.3.dylib /opt/local/lib/libboost_python-mt.dylib -Wl,-rpath,/opt/local/lib -Wl,-rpath,/Users/neil/nn/src
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&)", referenced from:
      boost::python::api::object boost::python::detail::make_function_aux<void (*)(_object*), boost::python::default_call_policies, boost::mpl::vector2<void, _object*>, mpl_::int_<0> >(void (*)(_object*), boost::python::default_call_policies const&, boost::mpl::vector2<void, _object*> const&, std::pair<boost::python::detail::keyword const*, boost::python::detail::keyword const*> const&, mpl_::int_<0>) in a.cc.o
  "boost::python::objects::register_dynamic_id_aux(boost::python::type_info, std::pair<void*, boost::python::type_info> (*)(void*))", referenced from:
      void boost::python::objects::register_dynamic_id<A>(A*) in a.cc.o
ld: symbol(s) not found for architecture x86_64

如何在不自行安装 boost 的情况下解决此错误。和这个Related question一样,库中的符号

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++ osx-mavericks macports boost-python


    【解决方案1】:

    我将编译器更改为clang++,并且成功了。会更喜欢更好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多