Я пробовал много вещей, но я не смог заставить это работать.
Мне нужно собрать Python как общую динамическую библиотеку (в OSX).Поэтому, когда я запускаю otool -L
на любом из компонентов, мне нужно убедиться, что dylib связан.
Например:
$ otool -L $HOME/.pyenv/versions/2.7.11/lib/python2.7/lib-dynload/_ctypes.so
/Users/foo/.pyenv/versions/2.7.11/lib/python2.7/lib-dynload/_ctypes.so:
/Users/foo/.pyenv/versions/2.7.11/lib/libpython2.7.dylib (compatibility version 2.7.0, current version 2.7.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
В приведенном выше примере используется другой подход(это тоже не работает).Тем не менее, это демонстрирует (я думаю), как должен выглядеть успешно связанный Python.
Независимо от того, что я пробовал, мой вывод otool -L
выглядит так:
otool -L _ctypes.so
_ctypes.so:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
Я не вижу, чтобы динамический файл lib libpython2.7.dylib
был связан.Файл существует в указанной выше папке.
Вот моя команда компоновки:
/configure --prefix=/Users/me/apps/python2.7.15-clang-1000.10.44 --enable-shared --enable-unicode=ucs2 CFLAGS="-arch x86_64" LDFLAGS="-arch x86_64"
Я предполагаю, что из-за того, что я строю в произвольном месте, компоновщик не может найти динамическую библиотекуфайл.
Я пробовал много вещей, настраивая $DYLD_LIBRARY_PATH
, проходя различные LD_
флаги, но пока безуспешно.
Пожалуйста, помогите мне, это сводит меня с ума: (
--- ОБНОВЛЕНИЕ ---
Итак, я попробовал это на другом компьютере, машине Linux с общим динамическим Python, и я могу подтвердить, что и бинарный файл python
и .so
файлы имеют ссылки на файл libpython2.7
.
ldd /usr/lib64/python2.7/lib-dynload/_ctypes.so
linux-vdso.so.1 => (0x00007ffd4a5dd000)
libffi.so.6 => /lib64/libffi.so.6 (0x00007f443bf1e000)
libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007f443bb52000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f443b935000)
libc.so.6 => /lib64/libc.so.6 (0x00007f443b572000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f443b36e000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f443b16a000)
libm.so.6 => /lib64/libm.so.6 (0x00007f443ae68000)
/lib64/ld-linux-x86-64.so.2 (0x0000558a69696000)
, а фактическая корзина python
выглядит следующим образом:
ldd /usr/bin/python
linux-vdso.so.1 => (0x00007fff1850f000)
libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007f839c1a5000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f839bf89000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f839bd84000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f839bb81000)
libm.so.6 => /lib64/libm.so.6 (0x00007f839b87f000)
libc.so.6 => /lib64/libc.so.6 (0x00007f839b4bb000)
/lib64/ld-linux-x86-64.so.2 (0x0000556816d12000)
Так что теперь я абсолютно уверен, что мне не хватаетчто-то.