培训网站建设方案模板,微商城网站建设怎么样,工厂招工信息,企业名录搜索软件哪个好摘要 win10系统#xff0c;编译器为mingw#xff0c;按照教程封装C的一个类并用python调用#xff0c;一步步进行直到最后一步运行python代码时#xff0c;在python代码中import example时报错ImportError: DLL load failed while importing _example: The specified modul…摘要 win10系统编译器为mingw按照教程封装C的一个类并用python调用一步步进行直到最后一步运行python代码时在python代码中import example时报错ImportError: DLL load failed while importing _example: The specified module could not be found.本文记录我的解决方法和其它一些解决思路。
先测试C语言
官方文档有完整教程命令分别为 swig -python example.i gcc -c -fpic example.c example_wrap.c -I “C:/Users/xd15zhn/AppData/Local/Programs/Python/Python310/include” gcc -shared example.o example_wrap.o -o _example.pyd -L “C:/Users/xd15zhn/AppData/Local/Programs/Python/Python310/libs” -lpython310 注意包含头文件目录和库目录具体方法见文末的参考链接。 example.c
#include stdio.h
double My_variable 3.0;
int my_sum(double a, double b) {return(a b);
}
void my_print() {printf(Hello World!\n);
}example.i
%module example
%{extern double My_variable;extern int my_sum(int n, int m);extern void my_print();
%}
extern double My_variable;
extern int my_sum(int n, int m);
extern void my_print();main.py
import example
example.my_print()
print(example.my_sum(1,2))再测试C swig -c -python example.i g -c -fPIC example.cpp example_wrap.cxx -I “C:/Users/xd15zhn/AppData/Local/Programs/Python/Python310/include” g -shared example.o example_wrap.o -o _example.pyd -L “C:/Users/xd15zhn/AppData/Local/Programs/Python/Python310/libs” -lpython310 example.cpp
#include iostream
#include example.hpp
void Example::say_hello() {std::cout Hello world! std::endl;
}
double Example::my_sum(double a, double b) {return ab;
}example.hpp
class Example {
public:void say_hello();double my_sum(double a, double b);
};example.i
%module example
%{
#include example.hpp
%}
%include example.hppmain.py
import example
e example.Example()
e.say_hello()
print(e.my_sum(1,2))运行本节开头的3条命令后不出意外的话运行3条命令后依次分别生成
example.py, example_wrap.cxxexample.o example_wrap.o_example.pyd
问题描述与解决
最后运行main.py后在import example时报错ImportError: DLL load failed while importing _example: The specified module could not be found. stackoverflow上有人提到了这个问题一个解决方法是 I met exactly the same problem after upgraded python to 3.9 on windows . After struggling for hours, I managed to solve it by manually copying some dlls from ***/mingw/bin/ where mingw32-g is found to where my ***.pyd is located. I’m sure that ***/mingw/bin/ has been appended to %PATH%, but don’t know why python3.9 couldn’t find it. 按照这个方法我把/mingw/bin/目录下的所有.dll文件全都复制到当前项目目录下确实解决了问题但文中说只复制了一部分想到使用静态编译需要用到两个命令-static-libstdc和-static-libgcc然后测试了一下确实是只需要这两个文件。除了复制文件这一不太优雅的方法以外只需要在python代码中加上/mingw/bin/目录即可完整的python代码如下
import os
os.add_dll_directory(C:/Users/xd15zhn/Documents/mingw64/bin)
import example
e example.Example()
e.say_hello()
print(e.my_sum(1,2))但这种方法还是不够优雅能不能把这两个动态库直接链接到_example.pyd文件里我尝试在上面第3条命令后加上-llibgcc_s_sjlj-1 -llibstdc-6但没有用。不知道有没有更优雅的解决方法。
其它
下面的代码用于单独生成example.cpp的动态库来测试自己写的代码是否有问题。 g example.cpp -fpic -shared -o example.dll g main.cpp example.dll -o untitled 参考
SWIG doesn’t work on Windows with MinGW-w64 when binding C and Python: DLL load failed while importing: The specified module could not be found -stackoverflow gcc静态编译之-static-libstdc、-static-libgcc、-static -简书 g编译详解 -CSDN博客 gccg链接动态库或静态库方法 -CSDN博客 SWIG:Python调用C(新手保姆级示范) -知乎 The specified module could not be found的解决办法 -CSDN博客