当前位置: 首页 > news >正文

备案网站内容说明上海大学生做网站的团队

备案网站内容说明,上海大学生做网站的团队,做企业网站一般用什么服务器,加油站项目建设背景目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补#xff0c;本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境#xff1a; Linux gnuPython3.10… 目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境 Linux gnuPython3.10CMakeC11 首先使用官网提供的说明对pybind11进行基本的介绍具体内容如下 pybind11 是一个轻量级的头文件库用于在 Python 和 C 之间互相暴露类型主要用于为现有的 C 代码创建 Python 绑定。它的目标和语法类似于 David Abrahams 开发的出色 Boost.Python 库通过使用编译时内省来推断类型信息最小化传统扩展模块中的样板代码。 Boost.Python 的主要问题在于其所属的 Boost 套件。Boost 是一个巨大的、复杂的实用程序库集合几乎可以与所有现存的 C 编译器一起工作。这种兼容性是有代价的为了支持最古老和最有问题的编译器样本必须使用神秘的模板技巧和变通方法。现在由于广泛可用的兼容 C11 的编译器这种重型机制已经变成了一个过大且不必要的依赖项。 将这个库视为 Boost.Python 的一个微型自包含版本其中剥离了与绑定生成无关的所有内容。没有注释的核心头文件只需约 4K 行代码并依赖于 Python3.7 或 PyPy和 C 标准库。这种紧凑的实现得益于一些 C11 语言特性特别是元组、lambda 函数和可变参数模板。自从该库创建以来它在许多方面已经超越了 Boost.Python导致在许多常见情况下绑定代码大大简化。 本博客主要介绍现在主流的Pybind11实现Python调用C程序。 二、安装 pybind11 克隆pybind11工程项目文件在终端输入命令如下 git clone https://github.com/pybind/pybind11.git安装依赖包pytest用于pybind11示例测试在终端输入命令如下 pip install pytest编译pybind11并进行安装依次输入命令如下 cd pybind11 mkdir build cd build cmake .. cmake --build . --config Release --target check -j4 make install 三、编写C示例代码 编写一个C示例代码用于进行简单的除法计算。后续使用python语言进行调用C示例代码具体内容如下 说明需要在原来编写的C代码文件名称为test_strategy.cpp上增加pybind11/pybind11.h和pybind11/stl.h两个库同时要多定义一个空间变量namespace py pybind11最后需要进行pybind11模块的实例化即用”test“属性调用test函数。 #include iostream #include stddef.h #include stdio.h // This ert_main.c example uses printf/fflush #include pybind11/pybind11.h #include pybind11/stl.h namespace py pybind11; using namespace std;float test(float a, float b); float test(float a, float b) { return a / b; }// instantiation PYBIND11_MODULE(test_strategy, m) {m.def(test, test); } 四、结合Pybind11和CMake编译C工程 在准备好C代码后接下来就需要编写CMakeLists.txt文件引导CMake编译上一节的C工程具体内容如下 # CMake 最低版本号要求 cmake_minimum_required (VERSION 2.8)# 项目信息 项目名称和使用的C标准 project (test_strategy) set(CMAKE_CXX_FLAGS -stdc11)# 执行文件输出路径这里需要改成调用该函数的python环境 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}) set(PYTHON EXECUTABLE ~/anaconda3/bin/python)# 头文件和源文件保存路径 #set(INCLUDE_DIR ./include) set(SRC_DIR ../) find_package(pybind11 REQUIRED) include_directories(${pybind11_INCLUDE_DIRS})# 链接python的库文件 link_directories(~/anaconda3/lib) # 将python头文件包含进来 INCLUDE_DIRECTORIES(~/anaconda3/include/python3.10)# 链接到python动态库文件 link_libraries(~/anaconda3/pkgs/python-3.10.9-h89984f6_1/lib/libpython3.10.so)#include_directories(${INCLUDE_DIR}) file(GLOB_RECURSE SOURCES ${SRC_DIR}/test_strategy.cpp)Pybind11_add_module(${PROJECT_NAME} ${SRC_DIR}/test_strategy.cpp ${SOURCES}) 然后在终端中依次输入如下命令进行CMake编译 mkdir build cd build cmake .. make cp ../test_strategy.cpython-310-arrach64-linux-gnu.so最后得到该python环境下对应的动态库文件具体文件名如下所示 五、Python调用动态库 编写一个python脚本文件调用test_strategy动态库具体内容如下所示 from test_strategy import test res test(1, 2) print(1 / 2 , res)运行上述代码对应的py脚本测试结果输出如下所示 六、参考 [1] https://pybind11.readthedocs.io/en/stable/index.html [2] https://www.cnblogs.com/lidabo/p/16625524.html
http://www.dnsts.com.cn/news/70873.html

相关文章:

  • 网站建设和维护试卷it培训机构学费一般多少
  • 找别人做网站注意事项电子商务网站建设需求概述
  • 网站入侵怎么做做网站做得好的公司有哪些
  • 广州微信网站建设公司电话销售做网站犯法吗
  • 公司网站域名更改怎么做微信网站建设app公司
  • 学校网站开发报价表网站建设 创新
  • 网站卖掉被拿来做网站了织梦系统怎么做网站
  • 网站建设投标书模板魔智科技logo在线设计
  • ps中网站页面做多大的搜索关键词技巧
  • 主流网站开发语言会计公司
  • 网站备案号注销查询wordpress 手机模版
  • ps 做ui比较好的网站有哪些协会网站设计方案
  • 私人服装定制网站百度识图搜索
  • 河源和平县建设局网站会设计网站怎么做兼职
  • 网站推广网站江阳建设集团网站
  • 网站首页模板设计图wordpress动态标题
  • 网站外链是什么意思工信部网站备案查询 手机
  • 河南卫生基层系统网站建设房地产开发公司有哪些部门
  • 校园网站建设经费申请报告sae网站代备案
  • 建那种外卖网站该怎么做东莞seo建站优化工具
  • 武夷山网站设计花溪村镇建设银行网站
  • 网站建设应用技术个人网站能做淘宝客吗
  • 哪些网站用jsp网站标题名字和备案名字
  • 网站集约化建设 要求本地搭建wordpress建站教程
  • 天圆地方建筑网站网站建设w亿玛酷1专注
  • 贵州网站开发哪家便宜微信公众好第三方网站怎么做
  • 网站设计开发文档模板网站设计优秀作品
  • 网站定制公司地址google seo教程
  • 做搜狗网站排名深圳团购网站设计多少钱
  • 公司网站二维码怎么做wordpress自动保存编辑器图片