gpt4 book ai didi

python - 使用 ctypes 时 undefined symbol

转载 作者:行者123 更新时间:2023-12-02 19:45:31 24 4
gpt4 key购买 nike

我正在使用 ctypes 调用 C 代码:

mysum.cpp

//global variables and required functions are defined
int mysum(int ECG_sample)
{
int HR;
ecg_wave_sample = ECG_sample;
Filter_CurrentECG_sample(&ecg_wave_sample, &ecg_filterout);
Calculate_HeartRate(ecg_filterout,&global_HeartRate); // calculate HeartRate
HR = global_HeartRate;
return HR;
}

g++ -shared -o mysum.so -fPIC mysum.cpp 用于创建 .so 文件

Python 包装器:

libname = '/home/yasaswini/hp2-notebooks/notebooks/Algorithm_testing_on_database/mysum_example  /mysum.so'
libdir = './'
lib=ctl.load_library(libname, libdir)
py_add_one = lib.mysum
py_add_one.restype = ctypes.c_int
py_add_one.argtypes = [ctypes.c_int]
sample = -145
results = py_add_one(sample)

我收到此错误

 AttributeError Traceback (most recent call last) <ipython-input-75-858227ec99e5> in <module>
6 # 1. open the shared library
7 #mylib = ctypes.CDLL(libfile)
----> 8 py_add_one = lib.mysum
9
10 # 2. tell Python the argument and result types of function mysum

~/anaconda3/lib/python3.7/ctypes/__init__.py in __getattr__(self, name)
375 if name.startswith('__') and name.endswith('__'):
376 raise AttributeError(name)
--> 377 func = self.__getitem__(name)
378 setattr(self, name, func)
379 return func

~/anaconda3/lib/python3.7/ctypes/__init__.py in __getitem__(self, name_or_ordinal)
380
381 def __getitem__(self, name_or_ordinal):
--> 382 func = self._FuncPtr((name_or_ordinal, self))
383 if not isinstance(name_or_ordinal, int):
384 func.__name__ = name_or_ordinal

AttributeError: /home/yasaswini/hp2-notebooks/notebooks/Algorithm_testing_on_database /mysum_example/mysum.so: undefined symbol: mysum

有人可以指出我到底做错了什么吗?

最佳答案

这可能与 C++ 名称修改有关。

由于您使用的是 C++ (g++),因此需要将 extern 添加到 mysum.cpp 中函数的定义中。对于您的情况:

extern "C" int mysum(int ECG_sample) 
{
...
}

有关名称修改的更多信息

另请参阅

https://stackoverflow.com/a/11237254/7919597

https://stackoverflow.com/a/34380673/7919597

关于python - 使用 ctypes 时 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59351460/

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