В настоящее время я работаю, чтобы получить некоторую интуицию о взаимодействии 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
, но появляется та же ошибка. Пожалуйста, помогите мне соответственно.