如何将Python构建为共享动态库?

时间:2018-10-16 11:14:33

标签: python compilation shared-libraries dynamic-linking

我尝试了很多事情,但是无法正常工作。

我需要将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)

我看不到动态库文件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_标志,但到目前为止没有成功。

请帮助我,这让我发疯了:(

---更新---

因此,我在另一台计算机(具有共享动态Python的Linux计算机)上尝试了此操作,并且可以确认python二进制文件和.so文件都具有指向{{1}的链接}文件。

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

所以现在我绝对可以确定自己缺少什么。

0 个答案:

没有答案