C/C++调用Python函数(命令行实现)

博主曾写过 C/C++调用Python函数(CodeBlocks平台实现) 的博文,依赖软件平台实现Python调用存有一定的局限性,当博主需要使用他人编写的编译器时,平台的调用就极为复杂,甚至无法调用,因此,博主粗浅地学习了一下使用命令行实现C/C++调用Python函数的方法。

C/C++程序部分以及Python函数部分在 C/C++调用Python函数(CodeBlocks平台实现) 中实现,本教程仅介绍程序代码编写完成后,如何设置命令行以实现代码执行。

博主使用了Makefile文件,以下是博主最终的Makefile文件内容:

testName=Ternary_MNIST

$(if $(testName),,$(error 'testName' must be defined before Makefile.simple is used))

CILPATH=../../../..
REMOTE_HOST=localhost
CFLAGS += -DREMOTE_HOST=$(REMOTE_HOST) -O3

./a.out: $(testName).oc $(testName).c ../../common/util.c $(CILPATH)/_build/libobliv.a
	$(CILPATH)/bin/oblivcc $(CFLAGS) -I . $(testName).oc $(testName).c ../../common/util.c -I ../../../../../../../home/wjh/.conda/envs/tensorflow-gpu/include/python3.6m -L ../../../../../../../home/wjh/.conda/envs/tensorflow-gpu/lib/libpython3.6m.so -lpython3.6

clean:
	rm -f a.out

以上内容是基于一个他人编写的编译器实现C调Python,简洁版本如下:

main:main.c
	gcc -o main main.c -I /usr/include/python3.5 -L /usr/lib/python3.5/config-3.5m-x86_64-linux-gnu -lpython3.5
clean:
	rm -rf *.o

其中:
(1)main:main.c 指向main函数程序,.c文件的命名可以自行修改,该部分为 make 命令将执行的操作;
(2)clean: 部分的内容,为命令 make clean 将执行的操作;
(3)对于 gcc -o main main.c -I /usr/include/python3.5 -L /usr/lib/python3.5/config-3.5m-x86_64-linux-gnu -lpython3.5 命令,
gcc 为C语言编译器,需要使用C/C++可将其修改为 g++
-o main main.c 部分为生成对应的.o文件设置,其中 mainmain.c 命名必须一致;
-I /usr/include/python3.5 设置程序依赖的include头文件,系统会在原有编译器自带的头文件上加入自行设置的Python部分的头文件,该部分的Python头文件路径需要自行修改;
-L /usr/lib/python3.5/config-3.5m-x86_64-linux-gnu -lpython3.5 为Python编译器的链接设置,路径设置的文件夹中必须包含 libpython3.5.so 或是类似命名的文件,-lpython3.5 需要根据自己的Python版本修改命名;
(4)rm -rf *.o 为 make clean 命令的具体操作。

Makefile文件编写完成后,文件列表显示如下:

在这里插入图片描述
其中包含C/C++程序文件、Python函数文件以及Makefile文件

在该目录中打开命令行,输入 make 命令,回车,即会生成对应的可执行程序文件

在这里插入图片描述
在命令行中执行该可执行程序,便可实现C/C++调用Python函数的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值