目录

前言

一、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文件相关推荐

  1. 干货丨从概念到实践,我们该如何构建自动微分库

    像 PyTorch 或 TensorFlow 这样通用的自动微分框架是非常有用和高效的,而且在大多数情况下,几乎不需要再写一些更专门化的东西.然而本文作者构建了一个自动微分库,以高效地计算小批量数据上 ...

  2. Win10中用VS2019编译live555

    前言 说明,本文是在Win10中用VS2019编译live555的过程中,对遇到的问题进行说明.编译过程主要参考的是下面一篇文章,在此表示感谢: https://blog.csdn.net/m0_37 ...

  3. 【已解决】海康威视MFC综合示例(C++ 官网Demo)采用VS2019编译异常如何解决?

    采用VS2019编译运行海康威视MFC综合示例Demo 一.文章背景: 二.操作步骤: 1.海康威视设备网络SDK下载: 2.VS2019 MFC开发环境配置: 3.MFC综合示例编译运行: 三.小结 ...

  4. CDR插件开发之CPG插件003 - 使用VS2019编译CDR类型库 VGCoreAuto.tlb

    在上篇文章中讲到了CPG插件环境的搭建,实际上主要是使用VS2019这个集成开发环境.由于要使用C++语言环境,因此在安装VS2019的过程中勾选了C++桌面开发环境.CDR软件环境请自行安装X4.X ...

  5. linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件...

    原创,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4555328.html  之前写过一篇<windows下Android利用ant自动编译.修改配置文件.批量 ...

  6. bat脚本+vs2019编译openssl(x86 | x64) - (static | shared) - (debug | release)

    一.准备工作(perl, nasm, cygwin) 工作需要,我要以(x86 | x64) - (static | shared) - (debug | release)选项编译openssl,最终 ...

  7. vs2019 编译 WRK 踩坑记录

    一.回顾 上一篇博客介绍了命令行编译 WRK 到调试的所有步骤,理论上我们已经可以开始学习了. 但是 IDE 可以方便的查找和修改函数,好处多多,所以这篇博客介绍如何使用 visual studio ...

  8. VS2019编译 当前最新版chromium

    VS2019编译 当前最新版chromium 之前编译过webrtc和chromium, 由于长时间没用,被我删除了, 最近在最新版本的google浏览器上遇到了播放器兼容性问题,老版本的google ...

  9. 3D进阶之OSG:从VS2019编译osgEarth开始

    3D库比较多,一般学习的有PCL的VTK,库比较大,集成了相当多不错的算法,对开发水平是个考验:OGRE由于其插件式架构,使得在机器人开发方面应用广泛:相对而言,OSG比较小众,可以用来构建模拟仿真的 ...

最新文章

  1. linux 远程挂载摄像头_如何实现嵌入式Linux下USB摄像头视频采集
  2. Python安装pyinstaller模块的错误:NO module name “setuptools“
  3. 将页面数据转json存入数据库
  4. LeedCode篇:234. 回文链表
  5. Head First设计模式读书笔记九 第十章 状态模式
  6. Winform导入文件
  7. 如何减少返工工作量?
  8. [转载] python下求语数总分和平均值_R和python语言如何求平均值,中位数和众数
  9. Android Framebuffer设置分辨率
  10. 泛型编程 与 STL
  11. matlab 每日学习 fft2 ifft2函数
  12. 百家姓中国心头像大全
  13. data协议,好玩,好用
  14. 基于Android系统的智能社区平台系统APP设计与实现(含论文)
  15. java基础-File类与IO流
  16. 网络对抗技术 实验三
  17. Windows常用快捷键及结束explorer.exe出现蓝屏的办法
  18. 基于HSV颜色空间的辅助车牌定位
  19. 【NA】函数最佳逼近(二)勒让德多项式
  20. 应用matlab仿真几类混沌电路,典型混沌电路及分析.ppt

热门文章

  1. 使用tracking.js 实现移动端webapp浏览器调用摄像头并检测人脸
  2. 华为p20pro投屏电脑 华为p20pro性能介绍
  3. android 盲人辅助,微光盲人无障碍生活辅助
  4. SNPE分析与评测 (1)
  5. 华为云GaussDB亮相DAMS峰会,分享构建开放生态与数据库国产化经验
  6. oracle dg ora-12154,主库到standby报错解决:Error 12154 received logging on to the standby ORA-12154...
  7. android半透明圆形按键,android popupwind背景半透明recycleview底部圆角
  8. html标签Windows10无法使用,window 10 Microsoft Edge 无法使用开发者模式【F12】
  9. 声音之均衡器(Equalizer)
  10. pattern的数学含义