使用使用Boost / python.hpp的CMake编译c ++ Programm

时间:2015-05-19 23:20:28

标签: python c++ boost cmake

我目前正在尝试使用CMake编译c ++文件。 但由于我使用的是Boost :: python,因此无法编译。 我设置了一个小测试文件,以确定我需要做什么,但我无法让它工作。 任何帮助将不胜感激!!

测试文件:

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

using std::cout;
using std::endl;

int main()
{
    namespace py = boost::python;

    Py_Initialize();

    // Retrieve the main module's namespace
    py::object global(py::import("__main__").attr("__dict__"));

    py::exec("print 'Hello from Python!' \n", global, global);

    return 0;
}

如果我只是使用它将编译,

clang++ -I/usr/include/python2.7 -lpython2.7 -lboost_python -std=c++11 boosttest.cpp -o boosttest

我尝试了这个CMakeLists.txt让它发挥作用。

cmake_minimum_required(VERSION 3.2)

FIND_PACKAGE(PythonLibs)
FIND_PACKAGE(Boost)

INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
LINK_LIBRARIES(${Boost_LIBRARIES} ${PYTHON_LIBRARIES})

add_executable(Test1 boosttest.cpp)
target_link_libraries(Test1 ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})

我得到的是

undefined reference to `boost::python::import(boost::python::str)'

以及更多同一类别。

2 个答案:

答案 0 :(得分:2)

感谢您的帮助Mark,感谢我加入后的新错误

find_package(Boost REQUIRED python)

我能够发现问题是CMake为python 3.4选择了libs,但是Boost是针对2.7进行构建的。

所以解决方案是将版本包括在内:

FIND_PACKAGE(PythonLibs 2.7 REQUIRED)

答案 1 :(得分:1)

你试过吗

find_package(Boost REQUIRED python)

也会详尽地看看发生了什么

cmake . --debug-output
make VERBOSE=1