CTypes调用WSL编译的.so文件报WinError 193如何适配Windows Anaconda
报错根因
你遇到的OSError: [WinError 193] %1 is not a valid Win32 application报错本质是二进制格式不兼容:
WSL属于Linux兼容环境,用gcc编译出的libtest.so是ELF格式的Linux专属共享库,而PyCharm调用的Anaconda是Windows原生程序,仅支持识别PE格式的Windows动态链接库(.dll文件),二者无法跨环境直接通用。
可行修复方案
方案1:切换PyCharm运行环境至WSL
无需修改现有编译产物与业务代码,仅需调整PyCharm的Python解释器配置:
- 打开PyCharm解释器设置页面,新增「WSL」类型的解释器
- 选择对应WSL发行版内已经安装的Python作为项目解释器
项目运行时会直接在WSL环境中执行,可正常加载已编译的libtest.so文件。
方案2:编译Windows兼容的dll动态库
如果要保留Windows原生Anaconda作为运行环境,可选择以下任意一种方式编译符合要求的动态库:
- Windows本地编译:安装MinGW-w64环境后,执行命令
gcc -shared -o libtest.dll test.c编译生成dll文件,将Python代码中的库加载逻辑修改为lib = CDLL('./libtest.dll')即可运行。 - WSL交叉编译:在WSL中安装MinGW-w64交叉编译工具链(Ubuntu发行版可执行
sudo apt install gcc-mingw-w64-x86-64完成安装),执行交叉编译命令x86_64-w64-mingw32-gcc -shared -o libtest.dll test.c生成Windows可用的dll文件,同样修改Python代码中的库加载路径即可。
注意事项
编译生成的dll文件位数需要和Python解释器位数保持一致,64位Python只能加载64位编译的dll,32位Python只能加载32位编译的dll,否则仍会触发相同报错。
内容的提问来源于stack exchange,提问作者Zack
相关产品推荐
相关产品推荐

