首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从.so生成.cpp:未定义的建筑符号x86_64: Boost.Python MacPorts GCC6 not Clang

从.so生成.cpp:未定义的建筑符号x86_64: Boost.Python MacPorts GCC6 not Clang
EN

Stack Overflow用户
提问于 2016-07-27 20:43:20
回答 1查看 366关注 0票数 0

我正试图跟随公开类教程 for Boost.Python at Boost.org。我已经成功地完成了第一教程,当注释掉代码时,一旦类出现,错误就会发生。所有的东西都会分崩离析的部分是从.so文件中生成的.cpp文件。我得到了一个显然很常见的:“用于体系结构的未定义符号x86_64:”。我在这个问题上检查了多个问题,这些问题基本上都与我的案件无关。我在OSX10.11.6上,我使用macport来安装boost和gcc6。我把一切都安排好了,所以我实际上用gcc和g++代替了clang。这就是为什么我不相信我的问题是与此相关,因为我使用的是实际的g++,如果我的理解是正确的,我就不应该处理这个libstc++和libc++问题。我所有来自macport的包,以及macport本身都是最新的。有谁愿意分享一些见解吗?

当我运行创建.so的命令时:(我相信我一定缺少到Boost中的库的一些链接,但我不知道它是什么)

代码语言:javascript
复制
g++ -shared -o hello.so -fPIC hello.cpp `python-config --cflags --libs` -lboost_python

我收到了一些警告和一条简短的错误消息,但是hello.so.dSYM文件被创建并保存在目录中:

cc1plus:警告:命令行选项‘-’对于C/ObjC有效,但对C++无效 未定义的体系结构符号( "boost::python::objects::function_object(boost::python::objects::py_function x86_64&,std::Undefined &)“,引用于: init_module_hello()在cchDzx8t.o中 “"boost::python::objects::register_dynamic_id_aux(boost::python::type_info,std::pair ()(Void)”,引用自: init_module_hello()在cchDzx8t.o中 ld:在体系结构x86_64中找不到符号 collect2:错误: ld返回1退出状态

我的.cpp代码与本教程中所示的完全相同:

代码语言:javascript
复制
#include <boost/python.hpp>
using namespace boost::python;
struct World {   
    void set(std::string msg) { this->msg = msg; }
         std::string greet() { return msg; }
         std::string msg;
};
BOOST_PYTHON_MODULE(hello)
{
    class_<World>("World")
    .def("greet", &World::greet)
    .def("set", &World::set)
    ;   
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-17 10:06:34

无论您是否正确安装了GCC/G++,MacPorts总是在以libc++作为默认编译的系统上针对libc++构建其C++软件。

这意味着您的MacPorts版本Boost是用libc++编译的,这意味着您不能将它与GCC/G++一起使用(除非您跳过一些额外的圈来使用libc++和GCC)。

尽管你猜测你的问题不是你在另一篇文章中所描述的问题,但事实就是如此。你的选择是:

  • 使用clang++
  • 用g++构建自己的Boost副本
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38622849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档