在已经存在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.

  

Python 出现需要使用fPIC重新编译的问题的更多相关文章

  1. 自发行python版本制作(二)编译

    本系列文章第二篇主要说明windows环境的编译环境搭建以及编译过程. 编译环境选择: 1.选用作神一样存在的Microsoft Visual C++ Compiler for Python 2.7为 ...

  2. Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑

    Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑 前言 基于 python27 的 pyc 很容易被反编译,于是想到了pyd,加速运行,安全保护 必要准备 安装 ...

  3. 对Python源码加密及反编译前后对比

    关于python的加密 目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行 保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程. ...

  4. Editplus配置Java、Python、C/C++ (基于VS2010) 编译环境

    1. 为什么要配置EditPlus使其能够编译运行Java.Python.C/C++等程序? EditPlus是一款轻量级(大约2M)的文本编辑器,实际开发中,只需要关联相应的编译工具就可以化身为一个 ...

  5. Python与C相互调用、编译

    因为最近学习Boost::python的缘故,想尝试下不同语言之间的相互编译. 参考资料:http://blog.csdn.net/joliny/article/details/2457197. 很吃 ...

  6. Python基础教程(002)--编译型语音和解释器

    前言 理解解释器和编译型语言,及跨平台 解释器(科普) 计算机不能直接理解任何出机器语言以外的机器语言,必须要把程序员写的程序语言进行翻译,就是编辑. 将其他语音翻译成机器语言,被称为编译器. 编译器 ...

  7. 将 Python 打包的 exe 进行反编译

    Python 打包成 exe 之后,是否能从二进制文件中恢复出源代码?没有加密的话是可以的. 首先需要解包. 直接从 github 上下载就行:https://github.com/counterce ...

  8. Python环境搭建中解决C编译的问题

    下载必要文件 Python Microsoft Visual C++ Compiler for Python 2.7 setuptools 安装Python 安装VCForPython27 在命令行下 ...

  9. python入门科普IDE工具和编译环境

            应友人之邀,今天来讲述python的一些入门内容.本次讲解的并不是语法或者某个模块.                  python下载安装 大多数 Linux 发行版在默认安装的情况 ...

随机推荐

  1. myql定义和查看语句

     创建数据库: create database IF NOT EXISTS MY_TEST default charset utf8  COLLATE utf8_general_ci; 查看SQL语句 ...

  2. How to Map Distinct Value Types Using Java Generics--reference

    原文:http://www.codeaffine.com/2015/03/04/map-distinct-value-types-using-java-generics/ Occasionally t ...

  3. Android(java)学习笔记131:Intent启动别的Activity

    1.案例 (1)首先是main.xml和other.xml文件如下: main.xml文件: <?xml version="1.0" encoding="utf-8 ...

  4. iptables配置说明

    1.iptables的发展:  对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测.iptables是网络层的防火墙.   iptables的前身叫 ...

  5. RPM的基础命令/yum基本命令

    rpm的使用方式非常简单,常用的一些命令如下: 安装软件:rpm -ivh *.rpm 卸载软件:rpm -e 软件名 升级形式安装:rpm -U *.rpm 常用参数: -v 显示详细信息 -h 显 ...

  6. angualrjs学习总结三(http、select、表格、指令以及事件)

    一:http XMLHttpRequest:$http是angularjs的一个核心服务,用于读取远程服务器的数据.$http.get(url) 是用于读取服务器数据的函数.举例:<div ng ...

  7. docker 错误

    docker search ubuntuGet http:///var/run/docker.sock/v1.20/images/search?term=ubuntu: dial unix /var/ ...

  8. HashMap多线程死循环问题

    HashMap通常会用一个指针数组(假设为table[])来做分散所有的key,当一个key被加入时,会通过Hash算法通过key算出这个数组的下标i,然后就把这个<key, value> ...

  9. 【转】周末班LR笔记总结—新手入门必备

    本来想上传文件的,上传半天没反应,只有这样了,图片不知道能显示不. 上午 学到2012.1.13 七天课 第一天(入门)二.三.四天(VUGEN脚本) 五天(Controller)六天(Analyse ...

  10. HTTP层 —— 路由

    1.基本路由 最基本的 Laravel 路由只接收一个 URI 和一个闭包,并以此提供一个非常简单且优雅的定义路由方法: Route::get('foo', function () { return ...