Я считаю, что исходный код Python статически связывается с объединенной копией zlib.Чтобы заставить Python использовать вашу версию, вам, вероятно, потребуется загрузить исходный код Python и создать собственный интерпретатор с замененным измененным исходным кодом zlib.
# system python static lib bundles the zlibmodule.o code
ares% nm -ao /usr/lib/libpython2.6.a|grep initzlib
/usr/lib/libpython2.6.a:zlibmodule.o:0000000000000000 T initzlib
Обновлено: спасибо за дополнительную информацию, я вижучто ты пытаешься сделать
Как вы обнаружили, перенос вашего пользовательского zlib в общий объект не будет работать.Вам нужно вызвать ваши пользовательские функции zlib напрямую через дескриптор общего объекта, возвращаемый cdll.LoadLibrary()
.Вам нужно будет смоделировать структуру z_stream
, расширив ctypes.Structure
.
Частичный пример, который должен помочь вам:
from ctypes import *
class z_stream(Structure):
_fields_ = [
('next_in', c_char_p),
('avail_in', c_uint),
('total_in', c_ulong),
# finish adding all fields in the z_stream struct..
]
stream = z_stream()
zlib = cdll.LoadLibrary('./zlib-1.2.5/libz.so.1')
ret = zlib.deflateInit_(stream, 1, "1.2.5", sizeof(stream))
print ret