VS2019编译自动微分库ADOL-C并利用SWIG打包为.pyd文件
目录
前言
一、VS编译ADOL-C
二、SWIG生成.py和.cxx接口文件
三、VS编译.cxx生成.pyd
1. VS项目属性配置
2. 生成.pyd文件
前言
自动微分库ADOL-C提供了SWIG+Python的接口文件,在./ADOL-C/swig/文件夹中,并且写好了setup.py文件为Python安装adolc模块。但是setup.py的安装命令是为Linux环境编写的,在Windows下根本无法直接运行安装。因此,需要我们用Visual Studio手动进行编译。
整篇教程可以分为三步:VS编译ADOL-C、SWIG生成.py和.cxx接口文件、VS编译.cxx生成.pyd。
因此需要以下环境:
1. Visual Studio,版本可以不同;
2. MSYS2环境安装mingw-w64-x86_64-gcc 或 在Windows中安装Mingw64,可以在命令行中调用g++命令(如图,g++ --version),主要需要在第2步中使用;
3. Python环境,原生环境或Anaconda虚拟环境均可;
4. SWIG,可以在命令行中调用swig命令(如图,swig -version)。
提示:以下是本篇文章正文内容,下面案例可供参考
一、VS编译ADOL-C
在./MSVisualStudio/v14/文件夹下有编译教程README_VC++.md,根据步骤编译即可,得到的adolc.dll和一系列.obj文件在x64文件夹中,后续需要用到。
二、SWIG生成.py和.cxx接口文件
ADOL-C和Python之间的接口规则定义写在adolc-python.i文件中,因此使用SWIG生成接口文件的命令如下:
swig --python -c++ -dirvtable -o adolc_python_wrap.cxx adolc-python.i
但是, 在swig/文件夹中直接运行以上命令会报错:
adolc-python.i(221) : Error: Unable to find 'adolc_all.hpp'
查看setup.py文件中的编译规则,发现首先需要生成adolc_all.hpp,调用了swigprocess.py中的prepare_flat_header()函数,prepare_flat_header()函数调用了invoke_cpp()函数,这个函数里面用到os.environ['CXX']:
s = os.environ['CXX'] + ' -std=c++11 -E -C -P -o ' + outfile + ' -Iinclude -nostdinc -DSWIGPRE ' + infile
在Windows环境中会报错找不到'CXX',因此将其改为:
s = 'g++ -std=c++11 -E -C -P -o ' + outfile + ' -Iinclude -nostdinc -DSWIGPRE ' + infile
进入Python命令行,执行以下语句:
>>> from swigprocess import prepare_flat_header
>>> prepare_flat_header()
在当前目录中生成了 adolc_all.hpp,再调用swig命令生成接口文件:
swig --python -c++ -dirvtable -o adolc_python_wrap.cxx adolc-python.i
三份新文件: adolc.py, adolc_python_wrap.cxx和adolc_python_wrap.h,adolc.py是供Python调用的,剩下两个需要在VS中编译生成_adolc.pyd文件被adolc.py调用。
三、VS编译.cxx生成.pyd
1. VS项目属性配置
在VS中创建空项目,配置项目属性,选择Release x64模式。配置类型为dll
目标文件扩展名改为.pyd,或者这里不改,生成dll后改为_adolc.pyd
VC++目录 —> 包含目录 添加ADOL-C头文件、Python头文件和NumPy头文件
VC++目录 —> 库目录 添加ADOL-C库文件目录、Python库文件目录
链接器 —> 常规 —> 附加库目录 添加ADOL-C库文件目录、Python库文件目录
链接器 —> 输入 —> 附加依赖项 添加ADOL-C库文件和Python库文件,下面是我用VS编译ADOL-C nosparse x64模式生成的.lib和.obj文件。如果链接器报错,核对.obj文件是否都添加了,以及pythonxx.lib的版本和路劲是否都是正确的。
python38.lib
adolc.lib
adalloc.obj
adolc_lie.obj
adolc_lie_c.obj
adouble.obj
adouble_tl.obj
adouble_tl_hov.obj
adouble_tl_indo.obj
advector.obj
checkpointing.obj
convolut.obj
drivers.obj
driversf.obj
externfcts.obj
externfcts2.obj
fixpoint.obj
fortutils.obj
forward_partx.obj
fos_forward.obj
fos_pl_forward.obj
fos_pl_reverse.obj
fos_pl_sig_forward.obj
fos_pl_sig_reverse.obj
fos_reverse.obj
fov_forward.obj
fov_offset_forward.obj
fov_pl_forward.obj
fov_pl_sig_forward.obj
fov_reverse.obj
hos_forward.obj
hos_ov_reverse.obj
hos_reverse.obj
hov_forward.obj
hov_reverse.obj
hov_wk_forward.obj
indopro_forward_pl.obj
indopro_forward_s.obj
indopro_forward_t.obj
interfaces.obj
interfacesf.obj
int_forward_s.obj
int_forward_t.obj
int_reverse_s.obj
int_reverse_t.obj
nonl_ind_forward_s.obj
nonl_ind_forward_t.obj
nonl_ind_old_forward_s.obj
nonl_ind_old_forward_t.obj
odedrivers.obj
odedriversf.obj
param.obj
psdrivers.obj
psdriversf.obj
revolve.obj
rpl_malloc.obj
sparsedrivers.obj
sparse_fo_rev.obj
tapedoc.obj
tape_handling.obj
taping.obj
taylor.obj
zos_forward.obj
zos_pl_forward.obj
2. 生成.pyd文件
使用SWIG生成接口文件后,将swig/目录下的.h, .hpp和.cxx文件共8个文件复制到VS项目的路径下,并添加进项目。
最终项目的文件结构应该如下:
生成 —> 生成解决方案 (或者F7快捷键),.pyd文件生成在./x64/Release目录下,改名为_adolc.py,和adolc.py放到一起,测试例子能否跑通。
VS2019编译自动微分库ADOL-C并利用SWIG打包为.pyd文件相关推荐
- 干货丨从概念到实践,我们该如何构建自动微分库
像 PyTorch 或 TensorFlow 这样通用的自动微分框架是非常有用和高效的,而且在大多数情况下,几乎不需要再写一些更专门化的东西.然而本文作者构建了一个自动微分库,以高效地计算小批量数据上 ...
- Win10中用VS2019编译live555
前言 说明,本文是在Win10中用VS2019编译live555的过程中,对遇到的问题进行说明.编译过程主要参考的是下面一篇文章,在此表示感谢: https://blog.csdn.net/m0_37 ...
- 【已解决】海康威视MFC综合示例(C++ 官网Demo)采用VS2019编译异常如何解决?
采用VS2019编译运行海康威视MFC综合示例Demo 一.文章背景: 二.操作步骤: 1.海康威视设备网络SDK下载: 2.VS2019 MFC开发环境配置: 3.MFC综合示例编译运行: 三.小结 ...
- CDR插件开发之CPG插件003 - 使用VS2019编译CDR类型库 VGCoreAuto.tlb
在上篇文章中讲到了CPG插件环境的搭建,实际上主要是使用VS2019这个集成开发环境.由于要使用C++语言环境,因此在安装VS2019的过程中勾选了C++桌面开发环境.CDR软件环境请自行安装X4.X ...
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件...
原创,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4555328.html 之前写过一篇<windows下Android利用ant自动编译.修改配置文件.批量 ...
- bat脚本+vs2019编译openssl(x86 | x64) - (static | shared) - (debug | release)
一.准备工作(perl, nasm, cygwin) 工作需要,我要以(x86 | x64) - (static | shared) - (debug | release)选项编译openssl,最终 ...
- vs2019 编译 WRK 踩坑记录
一.回顾 上一篇博客介绍了命令行编译 WRK 到调试的所有步骤,理论上我们已经可以开始学习了. 但是 IDE 可以方便的查找和修改函数,好处多多,所以这篇博客介绍如何使用 visual studio ...
- VS2019编译 当前最新版chromium
VS2019编译 当前最新版chromium 之前编译过webrtc和chromium, 由于长时间没用,被我删除了, 最近在最新版本的google浏览器上遇到了播放器兼容性问题,老版本的google ...
- 3D进阶之OSG:从VS2019编译osgEarth开始
3D库比较多,一般学习的有PCL的VTK,库比较大,集成了相当多不错的算法,对开发水平是个考验:OGRE由于其插件式架构,使得在机器人开发方面应用广泛:相对而言,OSG比较小众,可以用来构建模拟仿真的 ...
最新文章
- linux 远程挂载摄像头_如何实现嵌入式Linux下USB摄像头视频采集
- Python安装pyinstaller模块的错误:NO module name “setuptools“
- 将页面数据转json存入数据库
- LeedCode篇:234. 回文链表
- Head First设计模式读书笔记九 第十章 状态模式
- Winform导入文件
- 如何减少返工工作量?
- [转载] python下求语数总分和平均值_R和python语言如何求平均值,中位数和众数
- Android Framebuffer设置分辨率
- 泛型编程 与 STL
- matlab 每日学习 fft2 ifft2函数
- 百家姓中国心头像大全
- data协议,好玩,好用
- 基于Android系统的智能社区平台系统APP设计与实现(含论文)
- java基础-File类与IO流
- 网络对抗技术 实验三
- Windows常用快捷键及结束explorer.exe出现蓝屏的办法
- 基于HSV颜色空间的辅助车牌定位
- 【NA】函数最佳逼近(二)勒让德多项式
- 应用matlab仿真几类混沌电路,典型混沌电路及分析.ppt
热门文章
- 使用tracking.js 实现移动端webapp浏览器调用摄像头并检测人脸
- 华为p20pro投屏电脑 华为p20pro性能介绍
- android 盲人辅助,微光盲人无障碍生活辅助
- SNPE分析与评测 (1)
- 华为云GaussDB亮相DAMS峰会,分享构建开放生态与数据库国产化经验
- oracle dg ora-12154,主库到standby报错解决:Error 12154 received logging on to the standby ORA-12154...
- android半透明圆形按键,android popupwind背景半透明recycleview底部圆角
- html标签Windows10无法使用,window 10 Microsoft Edge 无法使用开发者模式【F12】
- 声音之均衡器(Equalizer)
- pattern的数学含义