在visual studio 2017
中创建了一个空的c ++
使用以下C ++方法添加了以下文件
// gfg.c
#include <stdio.h>
#include <math.h>
//our header file
#include "gfg.h"
#define ll long long
double myvar = 3.4;
// calculate factorial
ll int fact(ll int n)
{
if (n <= 1)
return 1;
else
return (n * fact(n - 1));
}
//find mod
int my_mod(int n, int m)
{
return(n % m);
}
// gfg.h
#pragma once
long long int fact(long long int n);
int my_mod(int n, int m);
// gfg.i痛饮
/* file : gfg.i */
/* name of module to use*/
%module gfg
%{
/* Every thing in this file is being copied in
wrapper file. We include the C header file necessary
to compile the interface */
#include "gfg.h"
/* variable declaration*/
double myvar;
%}
/* explicitly list functions and variables to be interfaced */
double myvar;
long long int fact(long long int n1);
int my_mod(int m, int n);
/* or if we want to interface all functions then we can simply
include header file like this -
%include "gfg.h"
*/
为gfg.i文件添加了以下自定义操作,输出文件名为gfg_wrap.c
$(SWIG_PATH)\swig.exe -python gfg.i
在编译gfg.i文件时,它给出了两个输出gfg.py
和gfg_wrap.c
。
然后我创建了包含以下内容的Setup.py
文件
# File : setup.py
from distutils.core import setup, Extension
#name of module
name = "gfg"
#version of module
version = "1.0"
# specify the name of the extension and source files
# required to compile this
ext_modules = Extension(name='_gfg',sources=["gfg.i","gfg.c"])
setup(name=name,
version=version,
ext_modules=[ext_modules])
#C:\Python37\python_d.exe setup.py build_ext --inplace
,自定义操作为
C:\Python37\python_d.exe setup.py build_ext --inplace
此python目录包含swig.exe
执行此操作后,它在项目目录中生成了一个_gfg_d.cp37-win_amd64.pyd
文件。
从CMD得到import gfg
时显示以下错误。
我正在尝试从fact
访问gfg.h
方法,我是否错过了某些东西?
答案 0 :(得分:1)
python37.dll由Python的Release版本使用,但是您尝试使用Python的Debug版本,它正在寻找python37_d.dll。对于Python 3.7,使用python.exe
运行它,它将起作用。
如果要调试构建,请使用:
setup.py build_ext --debug --inplace
扩展名将为_gfg.cp37-win_amd64.pyd
(或其他平台上的某些变体)。对于发行版,必须将其命名为_gfg.pyd
;对于调试版,必须将其命名为_gfg_d.pyd
。我必须手动重命名它才能正常工作。
我没有找到强制使用该名称的选项:
C:\>copy _gfg.cp37-win_amd64.pyd _gfg_d.pyd
1 file(s) copied.
C:\>python_d
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 05:02:23) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import gfg
>>> gfg.fact(5)
120