• [转]boost::python开发环境搭建


    转自:http://www.cnblogs.com/gaoxing/p/4317051.html

    本来想用mingw编译boost::python模块,网上看了下资料太少,只有使用vs2012

    操作环境:win7 x64

    python: x86

    boost: 1.57

    • 编译boost::python模块

    1: 开始->Microsoft Visual Studio 2012->Visual Studio Tools->VS2012开发人员命令提示  ; 因为我python是32位的,所以使用这个命令窗口

    2:bootstrap.bat 编译出b2.exe

    3: b2.exe --with-python  --build-type=complete     ; 没搞明白link  runtime-runk的区别所以直接这么搞

    编译结果如下:

    • 创建vs工程(控制台工程)

    配置工程属性。

    工程默认使用动态库的 boost_python-vc110-mt-gd-1_55.lib,可以设置编译宏BOOST_PYTHON_STATIC_LIB 使用静态库:libboost_python-vc110-mt-gd-1_55.lib

    该工程可以不用设置静态库的名字,估计是头文件里面设置了的

    源文件

    复制代码
    #include<iostream>
    
    #include<boost/python.hpp>  
    #include<Python.h>
    using namespace boost::python;
    int main()
    {
        Py_Initialize();
    
        // 检查初始化是否成功
        if ( !Py_IsInitialized() )
        {
            return -1;
        }
    
    
    
    
        PyRun_SimpleString("import sys");  
        PyRun_SimpleString("sys.path.append('./')");  
    
        object mainModule;
        object mainNamespace;
    
        try
        {
            mainModule = import("__main__");
            mainNamespace = mainModule.attr("__dict__");
            exec("import os", mainNamespace, mainNamespace);  
            exec("print os.getcwd()", mainNamespace, mainNamespace);  
        }
        catch( ... )
        {
                if (PyErr_Occurred())  
                PyErr_Print();  
        }
    
        // 关闭Python
        Py_Finalize();
        system("pause");
    }
    复制代码

    最重要的地方来了

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

    两个头文件的位置一定是这样的。发现在很多c++项目中,头文件的位置不对经常引起各种问题 。该问题输出为;

    复制代码
    1>------ 已启动生成: 项目: python, 配置: Debug Win32 ------
    1>  main.cpp
    1>main.obj : error LNK2019: 无法解析的外部符号 __imp___Py_NegativeRefcount,该符号在函数 "public: __thiscall boost::python::api::object_base::~object_base(void)" (??1object_base@api@python@boost@@QAE@XZ) 中被引用
    1>main.obj : error LNK2019: 无法解析的外部符号 __imp___Py_Dealloc,该符号在函数 "public: __thiscall boost::python::api::object_base::~object_base(void)" (??1object_base@api@python@boost@@QAE@XZ) 中被引用
    1>main.obj : error LNK2001: 无法解析的外部符号 __imp___Py_RefTotal
    1>E:visual studio 2012ProjectspythonDebugpython.exe : fatal error LNK1120: 3 个无法解析的外部命令
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

    复制代码

    还好我手贱 移动了下位置

    最后检测了下 Python.h头文件不需要加,但是不知道是不是我这个源文件不需要

  • 相关阅读:
    【中位数 均分纸牌】 糖果传递
    【模板】 均分纸牌
    【离散化】 电影
    【离散化】 区间和
    【最大子矩阵】 城市游戏
    vue中如何引入Element-ui
    详细教你:如何搭建vue环境和创建一个新的vue项目
    vue中如何引入bootstrap
    十天冲刺(4)
    十天冲刺(3)
  • 原文地址:https://www.cnblogs.com/xuyuan77/p/8361547.html
Copyright © 2020-2023  润新知