python - 在 Linux 上从 C 链接到 python 2.7

标签 python c linker makefile embedding

您好,我在 Linux 系统上将我的 .so 文件链接到 Python 时遇到问题。 (我在 MacOS X 和 Windows 上工作得很好,但我坚持这个)

目前链接标志如下:

LIBS = -L/usr/local/lib/python2.7/config -lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic -L$(GTKLIBPREFIX) -L/usr/X11R6/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -rdynamic -lgmodule-2.0 -lglib-2.0 -ldl -lXi -lXext -lX11 -lm

并且编译标志设置为:

PYTHON =  /usr/local/include/python2.7 -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes

使用我构建的so文件会导致无法解析的符号。

然后我想在构建 so 文件上执行 ldd 因为我认为我应该在这里看到 python ??

我得到的是这个:

  linux-gate.so.1 =>  (0xffffe000)
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7f3f000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7f3b000)
    libutil.so.1 => /lib/tls/i686/cmov/libutil.so.1 (0xb7f36000)
    libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb7be6000)
    libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0xb7b62000)
    libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb7b5e000)
    libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb7acc000)
    libXi.so.6 => /usr/lib/libXi.so.6 (0xb7ac4000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0xb7ab7000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0xb79ed000)
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb79c7000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb78e8000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb78dd000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb77a9000)
    /lib/ld-linux.so.2 (0x80000000)
    libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb7793000)
    libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0xb778a000)
    libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb7750000)
    libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0xb7736000)
    libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb76fc000)
    libcairo.so.2 => /usr/lib/libcairo.so.2 (0xb769a000)
    libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb766b000)
    libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb7662000)
    libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb765f000)
    libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb765c000)
    libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb7653000)
    libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb764e000)
    librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7644000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0xb7641000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb763c000)
    libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb7611000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb75a7000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb7593000)
    libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb756e000)
    libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7550000)

没有 Python 的提示。

通过以下操作找到链接器标志:

/usr/local/lib/python2.7/config$ python2.7-config --ldflags

有谁知道我在这里做错了什么? (注意 Linux make 文件对我来说真的不是强项)

最佳答案

考虑添加到链接标志: -Wl,-R/home/me/mylibdir 另见 LD_RUN_PATH

关于python - 在 Linux 上从 C 链接到 python 2.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25105560/

相关文章:

python - celery :错误:无法识别的参数:worker -A test_tasks -l info -c 5

python - Django 静态设置

c++ - C++中的下列语句是什么意思

linux - Gcc 链接器自动找到需要的额外库

command-line - 如何使用 $ORIGIN 获取 RPATH 以在 Code::Blocks GCC 上工作?

python - 需要FilteredSelectMultiple小部件的指导

python - Python 中的状态机 : Run Code in Transition or State?

有人可以解释一下 stdio 缓冲是如何工作的吗?

c - IA32 寄存器地址

c++ - 从未执行过的代码中的微小更改如何产生影响?