Неправильный класс ELF при попытке загрузить C DLL в Python - PullRequest
1 голос
/ 29 июня 2019

C файл: data.c

    int aa[3] = {10, 20, 30};

    int* my_func()
    {
      return aa;
    }

Создать .so
>> gcc -c -Wall -Werror -fpic data.c
>> gcc -shared -o libdata.so data.o


Python файл: данные.py

    import ctypes
    f = ctypes.CDLL('./libdata.so').my_func
    f.restype = ctypes.POINTER(ctypes.c_int)
    print [i for i in f().contents]

Команда для выполнения:
>> python data.py

Сообщение об ошибке:

Traceback (most recent call last):
  File "data.py", line 11, in <module>
    f = ctypes.CDLL('./libdata.so').my_func
  File "/app/vbuild/RHEL6-x86_64/python/2.7.9/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: ./libdata.so: wrong ELF class: ELFCLASS32

1 Ответ

0 голосов
/ 29 июня 2019

Необходимо указать количество элементов в массиве, работает следующее:

$ cat data.py
import ctypes
f = ctypes.CDLL('./libdata.so').my_func
f.restype = ctypes.POINTER(ctypes.c_int*3)
print([x for x in f().contents])

$ python data.py 
[10, 20, 30]
...