C 语言调用 pybind11 生成的动态链接库
2021/5/17 10:25:11
本文主要是介绍C 语言调用 pybind11 生成的动态链接库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
简介
C 语言调用 pybind11 生成的动态链接库?这是什么需求?脱裤子放屁?
因为要在 python 里面可以调用 C 语言的代码,所以要用 pybind11 生成可以被 python 调用的动态链接库。可是,现在竟然有这种奇怪的需求,竟然要调用这个动态链接库!不管你的需求是哪里来的,如果有这个需求,看这篇就对了。网上的讨论几乎没有,毕竟谁会这么干啊。
这篇博客先介绍 pybind11 生成动态链接库,然后再讲如何调用.
pybind11 生成动态链接库
用下面的代码,可以编译生成一个 pybind11 动态链接库。在 python 里面可以调用。
#include <pybind11/pybind11.h> #include "example.h" int add(int i, int j) { return i + j; } PYBIND11_MODULE(example, m) { m.doc() = "pybind11 example plugin"; // optional module docstring m.def("add", &add, "A function which adds two numbers"); }
调用下面的命令,来生成动态链接库。
g++ -O3 -Wall -shared -std=c++11 -fPIC $(python3 -m pybind11 --includes) example.cpp -o example$(python3-config --extension-suffix)
在当前目录下面,会生成一个 example.cpython-38-x86_64-linux-gnu.so
。这时就可以使用 python 调用上面的 add 函数了。
使用 C 语言调用这个动态链接库
main.cpp 代码如下:
#include <stdio.h> #include "example.h" int main() { printf("Hello pybind11 library, %d \n", add(1, 2)); printf("Hello pybind11 library, %d \n", add(1111, 1222)); }
运行下面的命令编译链接 main.cpp,注意要找到自己本机上 libpython3.8.so 的位置。为什么需要呢?因为 example.cpython-38-x86_64-linux-gnu.so
并没有将 libpython3.8.so 链接进去,需要“动态链接”。此外还需要将头文件加进去,不然会报错,提示找不到头文件。
g++ -I/home/percent1/anaconda3/include/python3.8 -I/home/percent1/anaconda3/lib/python3.8/site-packages/pybind11/include main.cpp example.cpython-38-x86_64-linux-gnu.so ~/anaconda3/lib/libpython3.8.so
总结
为了从 C 语言里面调用 pybind11 生成的动态链接库,你需要做两件事情。一,找到依赖的头文件和库文件。二,编译链接。
这篇关于C 语言调用 pybind11 生成的动态链接库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享