Как собрать Python как общую динамическую библиотеку? - PullRequest
0 голосов
/ 16 октября 2018

Я пробовал много вещей, но я не смог заставить это работать.

Мне нужно собрать 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)

Так что теперь я абсолютно уверен, что мне не хватаетчто-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...