无法 link python 的共享库

Cannot link a shared library for python

我为 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

但是当我尝试 link 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 有什么问题?

-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