【问题标题】:Compile c++ Programm with CMake that uses Boost/python.hpp使用使用 Boost/python.hpp 的 CMake 编译 c++ 程序
【发布时间】:2015-05-19 23:20:28
【问题描述】:

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

还有几个相同的类别。

【问题讨论】:

    标签: python c++ boost cmake


    【解决方案1】:

    感谢你的帮助马克,感谢我收录后的新错误

    find_package(Boost REQUIRED python)
    

    我发现问题在于 CMake 为 python 3.4 选择了库,但 Boost 是针对 2.7 构建的。

    所以解决方案是这样包含版本:

    FIND_PACKAGE(PythonLibs 2.7 REQUIRED)
    

    【讨论】:

      【解决方案2】:

      你试过了吗

      find_package(Boost REQUIRED python)
      

      也可以详细运行以查看发生了什么

      cmake . --debug-output
      make VERBOSE=1
      

      【讨论】:

      • 我刚刚添加了它,现在我收到一个新错误:/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/ libboost_python.so:对“PyString_InternFromString”的未定义引用。调试输出还显示 findPythonLibs 显然找到了 Python 3.4 的 Libs
      猜你喜欢
      • 1970-01-01
      • 2012-04-10
      • 2012-09-24
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多