我尝试使用pip install mod-wsgi安装mod,使用标准的python3.6安装CentOS。我收到一个错误,说我需要使用--enable-shared作为./configure的标志重新编译python。
因此,我从这里下载并解压缩了python3.7源代码:https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
然后我运行./configure --enable-shared --enable-optimizations LDFLAGS="-Wl,-rpath /path/containing/lib" ( rpath是libpython3.7m.so的父dir ),然后是make。
此时,我不想运行make install,因为我不想污染系统可执行路径,因为我的$PATH中已经有了一个python3可执行文件。不过,我可以运行构建的python可执行文件。然后,我想继续使用./python -m pip install mod-wsgi,然后被一堆错误所击,上面写着如下内容:
/bin/ld: /usr/local/lib/libpython3.7m.a(bytes_methods.o): relocation R_X86_64_32S against symbol '_Py_NoneStruct' can not be used when making a shared object; recompile with -fPIC下面是gcc的路线:
gcc -pthread -shared -Wl,-rpath /etc/httpd/IDVPython \
build/temp.linux-x86_64-3.7/src/server/wsgi_thread.o \
build/temp.linux-x86_64-3.7/src/server/mod_wsgi.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_buckets.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_memory.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_interp.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_restrict.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_logger.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_server.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_convert.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_metrics.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_validate.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_daemon.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_apache.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_stream.o \
-L. \
-lpython3.7m \
-o build/lib.linux-x86_64-3.7/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so \
-L/usr/local/lib \
-L/usr/local/lib/python3.7/config-3.7m-linux \
-lpython3.7m这意味着pip安装是从/usr/local/lib/libpython3.7m.a而不是从/path/containing/lib/libpython3.7m.so加载libpython。
如何使pip安装引用正确的共享库?
编辑:
ldd ./python确认python应该使用所需的共享库:
linux-vdso.so.1 => (0x00007ffea0bfe000)
libpython3.7m.so.1.0 => /etc/httpd/IDVPython/libpython3.7m.so.1.0 (0x00002acb63080000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002acb635b9000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002acb637d5000)
libutil.so.1 => /lib64/libutil.so.1 (0x00002acb639d9000)
libm.so.6 => /lib64/libm.so.6 (0x00002acb63bdc000)
libc.so.6 => /lib64/libc.so.6 (0x00002acb63ede000)
/lib64/ld-linux-x86-64.so.2 (0x00002acb62e5c000)发布于 2021-01-15 06:39:38
最后,我重新命名了/usr/local/lib/libpython3.7m.a文件,这样当pip调用gcc时,它就找不到这个文件,并将libpython3.7m.so从我的python复制到/usr/local/lib
https://stackoverflow.com/questions/65710030
复制相似问题