使用boost::python出现链接错误

3

我在使用Boost的python库时遇到了问题。我的代码是:

#include <boost/python.hpp>
#include <Python.h>

namespace python=boost::python;

int main(int argc, char const *argv[])
{
    Py_Initialize();

    python::dict global;

    return 0;
}

我尝试了很多次,最接近一个可用程序的是与boost链接错误:

$ gcc -c $(python2.7-config --cflags)  bpt.cpp            
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [enabled by default]
$ gcc bpt.o $(python2.7-config --ldflags) -o bpt
bpt.o: In Funktion `dict':
/usr/include/boost/python/dict.hpp:89: Nicht definierter Verweis auf `boost::python::detail::dict_base::dict_base()'
collect2: error: ld returned 1 exit status

我通过apt-get安装了Boost(libboost-all-dev),所以gcc应该能找到它,不是吗?我知道使用bjam编译使用boost::python的程序是首选方式,但是因为我只想要用于绘图目的的Python解释器,我不想使用Jamfile和boost-build.jam等文件。那么我需要做什么才能链接到这个库呢?


2
Boost.Python不是仅有头文件,您还需要链接到库。尝试在gcc命令行中添加“-lboost_python”。 - Praetorian
谢谢,那就是我缺失的标志。您能告诉我在哪里可以自己找到这个信息吗? - Philipp
据我所知,CMake也可以为您完成这项工作。请参见https://dev59.com/NG435IYBdhLWcg3wvy05#5238644。 - olovb
@Praetorian 为什么你的回答在评论里? - olovb
它应该在Boost.Python文档的某个地方列出(希望Boost.Python在文档方面不是最好的)。 - Praetorian
因为我懒得找一个链接来证明链接是必要的。没有这个,它就不值得一个正式的回答(在我看来)。 - Praetorian
1个回答

4
作为Praetorian所说,您需要与适当的库进行链接。
-lboost_python添加到命令行中:
gcc bpt.o -lboost_python $(python2.7-config --ldflags) -o bpt

很不幸,boost-python文档对此问题并没有非常清晰的说明,但是有一个关于如何链接他们库的通用指导:如何链接boost库

只要你使用的库不是仅限于头文件,就需要进行链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接