使用Ubuntu和Python3.5提升Python和Cmake

2024-04-29 08:36:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用Cmake编译Boost Python时遇到问题。手动编译时,一切正常。以下是我如何设置和运行所有内容:

  • 安装Python3.5:

    sudo apt-get install python3-dev
    
  • http://www.boost.org/下载Boost的最新版本

  • 使用正确的标志运行引导:

    ./bootstrap.sh --with-python=python3.5
    
  • 在目录中编译Boost:

    ./b2
    
  • 将Boost头安装到/usr/local/include,将libs安装到/usr/lib/x86_64-linux-gnu

    sudo ./b2 install
    
  • 使用适当的标志编译示例:

    g++ greet_binding.cpp -I/usr/include/python3.5m -I/usr/local/include -lboost_python-py35 -lpython3.5m -o greet.so -shared -fPIC
    
  • 启动Python解释器:

    $ python3
    
    import greet
    
    greet.say_greeting("Foo")
    
    Hello, Foo!
    

问候语绑定.cpp:

#include <iostream>
#include <boost/python/def.hpp>
#include <boost/python/module.hpp>

using namespace std;
namespace bp = boost::python;

void say_greeting(const char* name)
{
        cout << "Hello, " << name << "!\n";
}

BOOST_PYTHON_MODULE(greet)
{
        bp::def("say_greeting", say_greeting);
}

但是,当我试图设置一个简单的CmakeLists.txt文件来编译它时,从Python导入compiled.so时会出错。

CMakeLists.txt:

cmake_minimum_required( VERSION 2.8.3 )
project ( boost-python-3.5-examples )

set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
-g -std=c++14 \
-I/usr/include/python3.5m \
-I/usr/local/include \
-lboost_python-py35 \
-lpython3.5m \
-fPIC" )

add_library( greet SHARED greet_binding.cpp )

编译得很好,然后我在build目录中启动python解释器:

$ python3

import libgreet

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /home/james/Programming/boost-python-3.5-examples/build/libgreet.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv

我做错什么了?


Tags: install目录soinclude标志usrlocalsudo