无法链接python的共享库

时间:2018-09-22 03:52:16

标签: linux python-3.x gcc centos7 ld

我为apache创建了一个模块,并使用gcc进行了编译:

gcc \
    $(apr-1-config --cflags) \
    $(apr-1-config --includes) \
    $(python3.6-config --cflags) \
    -fPIC -DSHARED_MODULE \
    -I/usr/include/httpd/ \
    -c mod_demo.c

但是当我尝试链接python库时,它不起作用:

ld \
    $(apr-1-config --link-ld) \
    $(python3.6-config --ldflags) \
    -Bshareable \
    -o mod_demo.so \
    mod_demo.o

输出消息是:

ld: -linker not found.

出了什么问题?标志是:

[root@demo demo]# python3.6-config --ldflags
-L/usr/lib64 -lpython3.6m -lpthread -ldl  -lutil -lm  -Xlinker -export-dynamic

如果编写不带-Xlinker的标志,则可以正常工作:

 ld \
    $(apr-1-config --link-ld) \
    -L/usr/lib64 -lpython3.6m -lpthread -ldl  -lutil -lm  -export-dynamic \
    -Bshareable \
    -o mod_demo.so \
    mod_demo.o

如何使用python3.6-config中的本机标志?-Xlinker有什么问题?

1 个答案:

答案 0 :(得分:2)

-Xlinker -export-dynamic是一件事,它告诉GCC将-export-dynamic传递给链接器。

您误用了python3.6-config --ldflags,因为它希望将其输出提供给GCC,而不是直接提供给ld。

尝试一下:

gcc \
    $(apr-1-config --link-ld) \
    $(python3.6-config --ldflags) \
    -shared \
    -o mod_demo.so \
    mod_demo.o