我正试图跟随公开类教程 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中的库的一些链接,但我不知道它是什么)
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代码与本教程中所示的完全相同:
#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)
;
}发布于 2016-08-17 10:06:34
无论您是否正确安装了GCC/G++,MacPorts总是在以libc++作为默认编译的系统上针对libc++构建其C++软件。
这意味着您的MacPorts版本Boost是用libc++编译的,这意味着您不能将它与GCC/G++一起使用(除非您跳过一些额外的圈来使用libc++和GCC)。
尽管你猜测你的问题不是你在另一篇文章中所描述的问题,但事实就是如此。你的选择是:
https://stackoverflow.com/questions/38622849
复制相似问题