簡體   English   中英

鏈接Boost.python示例的問題

[英]Issues linking Boost.python example

我正在嘗試編譯示例,但收到有關undefined reference to PyInt_Type/PyString_FromString/PyNumber_Divide等的undefined reference to PyInt_Type/PyString_FromString/PyNumber_Divide 。我已經將構建鏈接到boost_pythonpython3.6m

我正在用g++ example.cpp -L/usr/include/boost/python -lboost_python -lpython3.6m -I/usr/include/python3.6m

main.cpp中

#include <boost/python.hpp>
#include <boost/python/detail/wrap_python.hpp>
#include <boost/python/exec.hpp>
#include <boost/python.hpp>
#include <iostream>
#include <string>
#include <Python.h>

using namespace boost::python;

int main() {

  Py_Initialize();
  object main_module = import("__main__");
  object main_namespace = main_module.attr("__dict__");

  object ignored = exec("hello = file('hello.txt', 'w')\n"
                        "hello.write('Hello world!')\n"
                        "hello.close()",
                        main_namespace);
}

注意事項

  1. 我已經安裝了python3.6-dev
  2. 我能夠使用相同的構建參數並包含指令來運行
  3. 完整的錯誤清單
  4. 我正在使用Ubuntu 16.04

另外 :如果我理解正確的話以后的事發生了:當我和lboost_python它使用了一些功能鏈接我的生成PyInt_TypePyString_FromString 它具有關於它們的返回類型和輸入參數的信息,但是沒有關於它們的實際定義(即函數體)的信息,這些信息是在其他庫中定義的(在我的情況下是python庫),我必須告訴鏈接程序有關此庫的信息,以將其包含在其中建立。 我的理解正確嗎? 如果是,那為什么對python3.6m鏈接沒有幫助?

boost_python可能指向python 2.7版本,例如在debian Stretch中(應該具有與ubuntu 16.04類似的軟件包)。

> cd /usr/lib/x86_64-linux-gnu
> ls -l libboost_python*.*
... libboost_python-py35.a
... libboost_python-py27.a
... libboost_python.a -> libboost_python-py27.a
... libboost_python-py27.so.1.55.0
... libboost_python-py27.so -> libboost_python-py27.so.1.62.0
... libboost_python.so -> libboost_python-py27.so
... libboost_python-py35.so.1.62.0
... libboost_python-py35.so -> libboost_python-py35.so.1.62.0

我猜該庫的python 3.6版本可能尚不可用。 如果libboost_python-py35與python 3.6不兼容,則最簡單的選擇是使用python 3.5,即

-lboost_python-py35

用於動態鏈接。

您以錯誤的順序鏈接庫。 因為boost_python依賴於python3.6m ,所以boost_python必須排在最前面,而python3.6m必須boost_python python3.6m

PS:這是錯誤的: -L/usr/include-L告訴鏈接器在哪里可以找到庫,但是/usr/include包含標頭,而不是庫。 您根本不需要它,但如果需要,它是-L/usr/lib或類似名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM