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
相关文章推荐
- linux下使用swig让python调用C++(复杂版:包括多文件调用和链接库)
- linux下使用swig让python调用C++(复杂版:包括多文件调用和链接库)
- C++多线程中调用python api函数
- BCB(C++)调用Python
- C++调用PythonAPI线程状态和全局解释器锁
- python嵌入C++------ boost.python如何在C++中调用含有不定长参数tuple变量和关键字参数dict变量的函数
- Python笔记(二)――python调用C/C++模块
- 如何在C++调用Python
- 初始化函数中的虚函数调用( C++ vs python )
- CERL: PHP或Python调用C++实现的服务器
- 如何让python调用C和C++代码
- 如何让python调用C和C++代码
- Python调用采用Boost Python封装的c++(2)
- C++调用Python(4)
- C++多线程中调用python api函数
- CERL: PHP或Python调用C++实现的服务器
- C++ 应用程序中 嵌入的python脚本与C++程序的互相调用(访问 通信)
- C++多线程中调用python api函数
- 用C++调用PYTHON脚本
- Python笔记(一)——C/C++调用python