Ctypes: не удалось найти модуль (общая библиотека) для использования C -Код в Python - PullRequest
1 голос
/ 31 марта 2020

В настоящее время я работаю, чтобы получить некоторую интуицию о взаимодействии C-Code до Python. Для взаимодействия C -кода с Python я использую модуль ctypes и следую этим реализациям, таким образом:

Как мы знаем, что

Модуль ctypes предоставляет C совместимые типы данных и функции для загрузки библиотек DLL, поэтому можно выполнять вызовы к C разделяемым библиотекам без необходимости их изменения.

Я только что реализовал простую функцию используя C и сгенерировав файл " Shared Library " с помощью этих команд на Cygwin :

For Linux, 
- cc -fPIC -shared -o libfunc.so function.c
- gcc -shared -Wl,-soname,adder -o adder.so -fPIC function.c

On Windows, assuming that you have GCC installed: 
1 ~ $ gcc -std=c11 -Wall -Wextra -pedantic -c -fPIC function.c -o libfunc.o
2 ~ $ gcc -shared libfunc.o -o libfunc.dll

Затем я поместил все файлы в тот же каталог . Ниже приведены файлы:

  • function. c
  • libfun c .so
  • Testing.py

function . c

int func(int num) 
{
    if (num == 0)
        return 0;
    else
        return 1;
}

Testing.py

import os
import ctypes
from ctypes.util import find_library


num = 16
# To verify that Library is available in the specified path
pathToWin32Environment = os.getcwd()
pathToDll = pathToWin32Environment + "\\libfunc.so"
if not os.path.exists(pathToDll):
    raise Exception('Could not locate ' + pathToDll)

curr_dir_before = os.getcwd()
os.chdir(pathToWin32Environment)

# print("Available library:", find_library('libfunc.so'))


Lib_func = ctypes.cdll.LoadLibrary("F:/PythonCodeBase/NetEQ/libfunc.so")
# Lib_func = ctypes.CDLL(F:/PythonCodeBase/NetEQ/libfunc.so")
# Lib_func = ctypes.windll.LoadLibrary("libfunc.so")

Lib_func.func.argtypes(ctypes.c_int)
ret_val = Lib_func.func(num)

print(ret_val)

Я много раз пробовал, либо даю full Specified path, либо просто (.so) filename. Каждый раз я просто получаю ошибки такого типа.

- FileNotFoundError: Could not find module 'F:\PythonCodeBase\NetEQ\libfunc.so'. Try using the full path with constructor syntax.
- FileNotFoundError: Could not find module 'libfunc.so'. Try using the full path with constructor syntax.

Я делал несколько попыток, используя PyCharm IDE, а также Command Prompt, но появляется та же ошибка. Пожалуйста, помогите мне соответственно.

...