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

淄博市住房城乡建设委官方网站seo提高关键词

淄博市住房城乡建设委官方网站,seo提高关键词,新疆网站开发哪家好,幼儿园主题网络图设计动物世界目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补,本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境: Linux gnuPython3.10…

目录

    • 一、前言
    • 二、安装 pybind11
    • 三、编写C++示例代码
    • 四、结合Pybind11和CMake编译C++工程
    • 五、Python调用动态库
    • 六、参考

在这里插入图片描述

一、前言

  跨语言调用能对不同计算机语言进行互补,本博客主要介绍如何实现Python调用C++语言编写的函数。

  实验环境:

  • Linux gnu
  • Python==3.10
  • CMake
  • C++11

  首先,使用官网提供的说明对pybind11进行基本的介绍,具体内容如下:

pybind11 是一个轻量级的头文件库,用于在 Python 和 C++ 之间互相暴露类型,主要用于为现有的 C++ 代码创建 Python 绑定。它的目标和语法类似于 David Abrahams 开发的出色 Boost.Python 库:通过使用编译时内省来推断类型信息,最小化传统扩展模块中的样板代码。

Boost.Python 的主要问题在于其所属的 Boost 套件。Boost 是一个巨大的、复杂的实用程序库集合,几乎可以与所有现存的 C++ 编译器一起工作。这种兼容性是有代价的:为了支持最古老和最有问题的编译器样本,必须使用神秘的模板技巧和变通方法。现在,由于广泛可用的兼容 C++11 的编译器,这种重型机制已经变成了一个过大且不必要的依赖项。

将这个库视为 Boost.Python 的一个微型自包含版本,其中剥离了与绑定生成无关的所有内容。没有注释的核心头文件只需约 4K 行代码,并依赖于 Python(3.7+ 或 PyPy)和 C++ 标准库。这种紧凑的实现得益于一些 C++11 语言特性(特别是:元组、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 "-std=c++11")# 执行文件输出路径,这里需要改成调用该函数的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.hkea.cn/news/53879/

相关文章:

  • 设计网站大全网公司推广咨询
  • 北京网站建设价格上海关键词排名优化公司
  • 浙江华临建设集团有限公司网站seo优化网站词
  • 服装网站建设规划书范文免费的行情网站
  • 合肥企业自助建站seo课程培训班
  • 企业网站建设总结什么软件可以免费引流
  • 个人博客网站如何做SEO雅诗兰黛网络营销策划书
  • 唐山自助建站软件seo软件优化工具软件
  • 推广电子商务网站的案例网站推广策划书模板
  • 前端外包网站网站优化快速排名软件
  • 凡客做网站cba最新消息
  • 郑州做网站好的公搜索引擎优化好做吗
  • 网站 预算白度
  • 中国电商建站程序信息推广
  • 网站开发教程 布局优化技术
  • 做外贸网站需要请外贸文员吗网站seo诊断分析和优化方案
  • 百度网站怎么做的赚钱吗seo中文含义
  • 做网站界面的软件互联网培训
  • 电子商务网站建设与维护李建忠高级搜索引擎技巧
  • 做地产网站全网搜索软件
  • 网站开发培训班百度网站推广关键词怎么查
  • 东莞市做网站公司seo怎样
  • ps做网站大小尺寸应用商店优化
  • 网站站群建设方案知名网页设计公司
  • 广州网站建设公司哪家好专业的seo搜索引擎优化培训
  • 外国人做汉字网站seo搜索排名影响因素主要有
  • 外贸五金网站建设网站制作优化排名
  • 义乌网站建设多少钱网络平台营销
  • 怀仁有做网站的公司吗磁力搜索引擎2023
  • 建站行业都扁平化设计合肥网站推广公司哪家好