您的位置:首页 > 编程语言 > C语言/C++

c++调用python(复杂版)

2016-12-18 16:30 330 查看

1. 在window下

必须具备以下条件

系统添加了
PYTHONHOME
变量


可能的报错信息:否则你可能会遇到以下报错信息
Py_Initialize: unableto load the file system codec


添加方法:新建
PYTHONHOME
变量,赋值为你的python根目录,比如我的是
C:\Users\wangjiang\Anaconda3
,然后追加
path
变量
%PYTHONHOME%;%PYTHONHOME%/Scripts


C++应用位数和Python位数一致。(比如我新建的C++win控制台应用程序为64位;我的anaconda也是64位的)

然后开始配置编程环境(我用的是VS2013):

为C++程序添加include、lib

右击项目属性,进入
配置属性-->VC++目录


(1)在
包含目录
下追加你的python
include
目录。我这里是
C:\Users\wangjiang\Anaconda3\include


(2)在
库目录
下追加你的python
libs
目录。我这里是
C:\Users\wangjiang\Anaconda3\libs


添加依赖库

进入
配置属性-->连接器-->输入-->附加依赖项
。追加你的python*.lib库。我这里是
C:\Users\wangjiang\Anaconda3\libs\python35.lib


修改Python.h文件

做法:打开
include
目录下
Python.h
文件,在

#ifndef Py_PYTHON_H
#define Py_PYTHON_H


下面追加一行
#define MS_NO_COREDLL
或者
#define Py_NO_ENABLE_SHARED


如果不进行此步骤:可能会出现以下报错信息
cannot open file 'python35_d.lib'


然后你就可以愉快地写代码了。这里展示一下简单的示例

一个简单的栗子

c++书写以下代码:

// ConsoleApp64bit.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include "Python.h"

int _tmain(int argc, _TCHAR* argv[])
{
Py_Initialize();
PyRun_SimpleString("import sys; sys.path.append('.')");
PyRun_SimpleString("import mytest;");
PyRun_SimpleString("print(mytest.myabs(-2.0))");
Py_Finalize();
while (1){  # 死循环,防止程序自动退出。
int i = 0;
}
return 0;
}


在你的
源文件
下建立一个文件叫
mytest.py
,文件内容为:

import math

def myabs(x):
return math.fabs(x)


运行,然后会输出

2


2. 在linux下

首先配置变量

打开
/etc/bashrc
,添加
PYTHONHOME
,
LD_LIBRARY_PATH


PYTHONHOME=/home/nlp/anaconda3/bin
export LD_LIBRARY_PATH=/home/nlp/anaconda3/lib
PATH=$PATH:PYTHONHOME


用g++编译源程序

g++ main.cpp -I /home/nlp/anaconda3/include/python3.5m -L /home/nlp/anaconda3/lib -lpython3.5m


Ref

在VS2012中C++嵌入python

Python编程->cannot open file ‘python27_d.lib’

Calling a python method from C/C++, and extracting its return value
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: