【问题标题】:boost python library linking issue -- undefined symbolboost python库链接问题——未定义的符号
【发布时间】:2017-08-08 19:14:17
【问题描述】:

我正在使用为 python3 构建的 boost-python 来公开一个简单的 hello-world 程序。这个例子可以在这里找到:https://github.com/TNG/boost-python-examples/blob/master/01-HelloWorld/hello.cpp

我运行了以下命令来获取共享对象:

g++ -fPIC -c -I/usr/include/python3.4m -I/usr/include/python3.4m  -Wno-unused-result -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security  -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -L/usr/lib/x86_64-linux-gnu/libboost_python-py34 hello.cpp

g++ -shared hello.o -o hello.so

在此之后,我运行 python3 -c 'import hello' 命令并收到以下错误: Traceback(最近一次调用最后一次):

文件“”,第 1 行,在 ImportError:hello.so:未定义符号:_ZTIN5boost6python7objects21py_function_impl_baseE

我部分理解这个问题可能是因为我的 boost-python 安装可能是为替代 python 版本(例如 python2.7)构建的。当我运行命令时:

ls /usr/lib/x86_64-linux-gnu/libboost_python*.so

共有三个.so文件:

1. libboost_python-py27.so
2. libboost_python-py34.so
3. libboost_python.so

如何规避这个问题?

【问题讨论】:

  • 您可以尝试使用 -L 和 -I 添加完整的限定符,而不是 'g++ -shared hello.o -o hello.so'。我遇到了同样的问题,它对我有用。

标签: python c++ python-3.x ubuntu boost


【解决方案1】:

使用 pkg-config 检索 boost 库的 ldflags 和 cflags

【讨论】:

  • pkg-config libboost --lib 给我输出No package 'libboost' found
  • 您使用的是哪个发行版?你的 cmd 行有问题 -L/usr/lib/x86_64-linux-gnu/libboost_python-py34 不对,应该是目录 /usr/lib/x86_64-linux-gnu/ 和 -lboost-py34跨度>
  • 使用 ubuntu:14.04
  • 这应该是 pkg-config libboost-python-dev --libs
  • 不幸的是,在这个发行版中似乎没有 pkg​​-config 。 (packages.ubuntu.com/trusty/amd64/libboost-python1.54-dev/…)。因此,我们将尝试找到正确的命令行。你错过了命令行中的 -lboost_python 或 -lboost_python34 和 -lpython
【解决方案2】:

安装 miniconda 可能是您的一个选择。 https://conda.io/miniconda.html

这将提供一个完整、隔离的 python 环境。然后你可以 conda install boost

我已经在我的系统上对此进行了测试,它运行良好。我从http://www.shocksolution.com/python-basics-tutorials-and-examples/linking-python-and-c-with-boostpython/修改了Makefile

我的 Makefile 可以在这里找到: https://github.com/grelleum/boost-python-with-anaconda

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2020-12-14
  • 2016-08-22
相关资源
最近更新 更多