提问人:lolka0d 提问时间:11/7/2023 最后编辑:lemlolka0d 更新时间:11/7/2023 访问量:72
为什么使用 ctypes 从 C++ 运行函数会导致 Python 中的错误
Why run function from C++ using ctypes results in error in Python
问:
我在 ctypes 和 C++ 上有一个错误。当我尝试从weighty_functions.cpp运行函数时,出现错误:
File "/home/user/PycharmProjects/Snake/main.py", line 6, in <module>
print(weighty_functions.random_number_except_values(720, l))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/ctypes/__init__.py", line 389, in __getattr__
func = self.__getitem__(name)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/ctypes/__init__.py", line 394, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: ./lib.so: undefined symbol: random_number_except_values
如何更改 main.py 或weighty_functions.cpp来解决这个问题?
weighty_functions.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int random_number_except_values(int to, vector<int> except_values) {
vector<int> all_variants;
int result;
for (int i = 0; i < to; i++) {
if (find(except_values.begin(), except_values.end(), i) == except_values.end()) {
all_variants.push_back(i);
}
}
srand(time(NULL));
result = rand() % all_variants.size();
return result;
}
int main() {
return 1;
}
main.py
import ctypes
except_values = [1, 2, 3, 4]
weighty_functions = ctypes.CDLL("./lib.so")
except_values = (ctypes.c_int * len(except_values))(*except_values)
print(weighty_functions.random_number_except_values(720, except_values))
答: 暂无答案
评论
main()
extern "C"