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

Compile c++ Programm with CMake that uses Boost/python.hpp

本文关键字:hpp python c++ 程序 Boost CMake 编译 使用      更新时间:2023-10-16

我目前正在尝试使用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)'

和更多相同类别的

谢谢你的帮助Mark,谢谢我加入

后的新错误
find_package(Boost REQUIRED python)

我能够找出问题是CMake选择了python 3.4的库,但Boost是针对2.7构建的。

所以解决方案是包含如下版本:

FIND_PACKAGE(PythonLibs 2.7 REQUIRED)

你试过了吗

find_package(Boost REQUIRED python)

也可以用verbose来运行,看看发生了什么

cmake . --debug-output
make VERBOSE=1