gpt4 book ai didi

python - 无法在 Python 中加载共享对象文件

转载 作者:行者123 更新时间:2023-12-04 17:13:34 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Python Ctypes - loading dll throws OSError: [WinError 193] %1 is not a valid Win32 application

(3 个回答)


3个月前关闭。




我正在尝试使用 Python 中的 CDLL 函数加载共享对象文件,如下所示:

from ctypes import *

my_functions = CDLL("./my_functions.dll")

print(type(my_functions))
print(my_functions.square(10))

print("Done")
但出现以下错误:
Traceback (most recent call last):

File "C:\Users\me\My reserach - spyder\210903_\calling_c_functions.py", line 9, in <module>
my_functions = CDLL("./my_functions.dll")

File "C:\Users\me\anaconda3\lib\ctypes\__init__.py", line 381, in __init__
self._handle = _dlopen(self._name, mode)

OSError: [WinError 193] %1 is not a valid Win32 application
有谁知道是什么导致了问题?我只是按照 https://www.journaldev.com/31907/calling-c-functions-from-python 中的程序进行操作但与 .dll文件而不是 .so文件。请注意,我使用的是 Windows10 和 Python3.8。

[更新] OSError 已解决,但出现了另一个问题。
我遵循了@Yaroslav 的建议,现在我已经创建了 64 位 .dll命令提示符下的文件如下所示。
C:\Users\Me>call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat" -arch=x64
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.10.1
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
C:\Users\Me\FileLocation>cl.exe /D_USRDL /D_WINDLL my_functions.c /MT /link /DLL /OUT:my_functions.dll /MACHINE:X64

Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30037 for x64
Copyright (C) Microsoft Corporation. All rights reserved.

my_functions.c
Microsoft (R) Incremental Linker Version 14.29.30037.0
Copyright (C) Microsoft Corporation. All rights reserved.

/out:my_functions.exe
/DLL
/OUT:my_functions.dll
/MACHINE:X64
my_functions.obj
现在我试着调用这个新的 .dll来自 Python 的文件。这次我没有再收到 OSError 但我仍然收到一个奇怪的错误:
<class 'ctypes.CDLL'>
Traceback (most recent call last):

File "C:\Users\Me\My reserach - spyder\210903_\calling_c_functions.py", line 12, in <module>
print(my_functions.square(10))

File "C:\Users\Me\anaconda3\lib\ctypes\__init__.py", line 394, in __getattr__
func = self.__getitem__(name)

File "C:\Users\Me\anaconda3\lib\ctypes\__init__.py", line 399, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))

AttributeError: function 'square' not found
代码中的函数 'square' 不知何故无法识别。有谁知道是什么导致了这个问题?
我的原始 C 代码如下所示:
//Filename: my_functions.c
#include <stdio.h>

int square(int i){
return i * i;
}

最佳答案

您必须构建 64 位 dll(请参阅 -arch=x64 和/MACHINE:X64):

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat" -arch=x64

cl.exe /D_USRDLL /D_WINDLL api.cpp /MT /link /DLL /OUT:api.dll /MACHINE:X64

关于python - 无法在 Python 中加载共享对象文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69048225/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com