swig 和使用 Visual Studio 2017 命令行构建项目
Posted
技术标签:
【中文标题】swig 和使用 Visual Studio 2017 命令行构建项目【英文标题】:swig and building project with visual studios 2017 command line 【发布时间】:2017-08-29 10:23:12 【问题描述】:我需要从 SWIG 生成的 .cxx 文件创建一个 .pyd。对于 VS2017 和命令行,我有点菜鸟,我希望能得到一点帮助。
这是我到目前为止所做的:
适用于 Windows 的 SWIG 设置
1)。下载anaconda(使用python 3.6 x64版本)
2)。下载VS社区版
- installed all the c++ extensions
3)。下载了 FGDB API(windows 2017):
https://github.com/Esri/file-geodatabase-api/blob/master/FileGDB_API_1.5.1/FileGDB_API_1_5_1-VS2017.zip
4)。设置 Python 环境变量:
PYTHON_INCLUDE: C:\ProgramData\Anaconda3\include
PYTHON_LIB: C:\ProgramData\Anaconda3\libs\python36.lib
5)。下载并解压 Swig
6)。将 swig 路径添加到 PATH 环境变量
7)。从 google 主机或 github 下载 file-geodatabase-api 文件。 https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/file-geodatabase-api-python-wrapper/source-archive.zip
8)。创建文件夹:C:\fgdb_code
文件夹中应该有 .i、.py 和 make 文件9)。将步骤 7 中的文件放在此文件夹中
10)。将步骤 #3 中的文件解压缩到步骤 #8 的文件夹中
c:\fgdb_code\FGDB
生成 .cxx 文件
11)。以管理员身份打开命令行窗口(可能不需要管理员)
12)。导航到 c:\fgdb_code 文件夹
13)。运行:swig -python -IFGDB/include -c++ filegdbapi.i
This generates a .cxx file
``` 输出消息:
FGDB\include\Util.h(819) : Warning 312: Nested union not currently supported (ignored).
FGDB\include\Util.h(838) : Warning 312: Nested union not currently supported (ignored).
FGDB\include\Util.h(843) : Warning 312: Nested union not currently supported (ignored).
FGDB\include\Util.h(849) : Warning 312: Nested union not currently supported (ignored).
FGDB\include\Geodatabase.h(307) : Warning 503: Can't wrap 'FileGDBAPI::CreateGeodatabase' unless renamed to a valid identifier.
FGDB\include\Geodatabase.h(308) : Warning 503: Can't wrap 'FileGDBAPI::OpenGeodatabase' unless renamed to a valid identifier.
FGDB\include\Geodatabase.h(309) : Warning 503: Can't wrap 'FileGDBAPI::CloseGeodatabase' unless renamed to a valid identifier.
FGDB\include\Geodatabase.h(310) : Warning 503: Can't wrap 'FileGDBAPI::DeleteGeodatabase' unless renamed to a valid identifier.
```
从 VS 2017 生成 .pyd 文件
这就是我卡住的地方。 我尝试创建一个新的 VS 项目来生成 DLL,但我似乎无法让界面正常工作(我发现 VS 工作室的界面有点令人生畏)。有没有办法在不创建项目的情况下通过命令行做到这一点?如果是这样,有人可以就我如何做到这一点提供一些指导吗? 我应该只需要 .i 和 .cxx 文件来编译代码。
更新 从 VS 2017 生成 .pyd 文件
14)。打开 Visual Studios
15)。选择文件 -> 从现有代码
16)。选择c++
17)。输入以下内容:
- Project file location: folder from step #8
- project name: filegdbapi
- Check add files (should be checked by default)
- Click Next
18)。对于项目类型:动态链接库(DLL)项目
19)。按完成
20)。构建项目
失败:
1>------ Build started: Project: filegdbapi, Configuration: Release x64 ------
1>XSD : error : The CodeDom provider type "Microsoft.VisualC.CppCodeProvider, CppCodeProvider, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" could not be located.
1>
1>If you would like more help, please type "xsd /?".
1>Done building project "filegdbapi.vcxproj" -- FAILED.
谢谢
【问题讨论】:
【参考方案1】:这些库与您的 Visual Studio 版本不兼容
【讨论】:
你确定吗,上面写着VS2017 我的意思是,使用您的确切版本,例如在旧的 14.1 MSVC 版本中,您无法使您的程序可移植,在这种情况下,库与编译器不兼容 有没有办法弄清楚我需要什么来编译这个东西? 我唯一能告诉你的就是将你的 Visual Studio 更新到最新版本以上是关于swig 和使用 Visual Studio 2017 命令行构建项目的主要内容,如果未能解决你的问题,请参考以下文章
通过 SWIG 和 Visual Studio 2015 在 Java 中使用已编译的 DLL
尝试获取一个 C 库并使用 swig 将其公开给 Windows 中的 Python。关于静态与动态以及使用 Visual Studio for swig 的问题
Nodejs in Visual Studio Code 04.Swig模版