• 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.
    

      

  • 相关阅读:
    jqueryuidatepicker 可控制是否显示时分秒
    JQuery zTree v3.2和demo
    模拟网易163写的一个文本框触发效果
    不刷新页面,切换CSS文件
    Devs开源规则引擎介绍
    坑爹啊!!!win2003 x64企业版不支持tfs2010的源代码管理服务
    gui设计禁忌2.0读书笔记
    c#关于数据库自定义类型在存储过程中返回服务器端的问题
    vs2010 sp1在win2003不能安装的问题
    mysql真是不错!
  • 原文地址:https://www.cnblogs.com/laodageblog/p/5993742.html
Copyright © 2020-2023  润新知