zoukankan      html  css  js  c++  java
  • Python 出现需要使用fPIC重新编译的问题

    在已经存在python安装环境的情况下,当安装第三方的包的时候出现报错提示

    /usr/bin/ld: .../lib/libpython2.7.a(abstract.o): relocation R_X86_64_32 against 'a local symbol' can not be used when making a shared object; recompile with -fPIC
    .../lib/libpython2.7.a: could not read symbols: Bad value
    collect2: ld returned 1 exit status
    

      乍一看,错误信息非常明白,就是无法生成动态库,需要使用 -fPIC 参数来重新编译 Python。其实,就是把 Python 编译成动态库。

    有这么几种方法:

    • 直接修改Makefile:使用原来的 ./configure 参数生成 Makefile 后,打开并在 gcc 命令后面添加 -fPIC 参数。
    • 在 ./configure 参数中设置 CFLAGS 变量:在原来的 ./configure 参数后面追加 CFLAGS=-fPIC
    • 在 ./configure 参数中使用 --enable-shared在原来的 ./configure 参数后面追加 --enable-shared

    其中,最后一种方法是最简单的,这种方式编译出来的py库是.so形式村的,必须将其路径添加到LD_LIBRARY_PATH里面。

    在 make 的时候问题依在。我们明明看到每条 gcc 命令后面都跟了 -fPIC 参数,但是依然失败。继续在网络上搜索会找到如下几个原因:

    • 系统不支持位置相关代码(position-dependent code)(参见)。
    • 在64位系统上使用了32位的Python库。也就是你的Python被编译成了32位的。(参见)
    • 你的Python库没有被放置到正确的位置,或者系统找不到你的Python库。(参见)
    • 系统使用了错误的Python库。这就是多版本Python共存的典型问题。(参见)

    通过编译的时候指定引用的目录去解决

    ./configure --prefix=/bla/bla LDFLAGS=-L/path/to/your/python/lib
    

     如果还存在,可以通过设置 LDFLAGS 解决,如下:

    ./configure --prefix=/bla/bla LDFLAGS=-L.
    

      

  • 相关阅读:
    今天是JVM的生日,来了解下JVM的发展历史吧
    python 天天生鲜项目
    django中设置定时任务
    django-rest-framework视图和url
    rest_framework-分页
    rest_framework-序列化-1
    rest_framework-解析器
    django-rest-framework版本控制
    django-rest-framework限流
    django-rest-framework权限验证
  • 原文地址:https://www.cnblogs.com/laodageblog/p/5993742.html
Copyright © 2011-2022 走看看