在已经存在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. Linux内核学习笔记2

    http://www.cnblogs.com/bastard/category/412387.html

  2. 正则匹配ab不匹配aab

    var a = "aababaabababababaab"; a.replace(/(^|[^a])(ab)+/g, "$1"); var a = " ...

  3. Java基础知识强化之IO流笔记71:NIO之 NIO的(New IO流)介绍

    1. I/O 简介 I/O ( 输入/输出  ):指的是计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的. ...

  4. chosen 下拉框

    $("#teams").trigger("liszt:updated");//更新重新绑定                            $(" ...

  5. visibility,display区别

    visibility:hidden,display:none 前者隐藏位置还在,后者隐藏位置消失

  6. 关于MANIFEST.MF的理解

    打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息. 在Java平台中, M ...

  7. 关于SWT的容器类之----面板Composite类和Group类

    1.Comosite类谱系图. Composite的用法: 格式:Composite(Composite parent,int style) 用法:Composite composite = new ...

  8. .NET学习笔记(2) — IIS服务器环境搭建

    目录 一:开启Windows系统自带的IIS服务器方法 二:备注 三:常见问题     一:开启Windows系统自带的IIS服务器方法   第一步:安装IIS,控制面板->程序和功能-> ...

  9. smarty中的变量使用

    在模板中输出动态数据可以用{},所以容易与css中的标签相互冲突,所以使用{literal}{/literal}标签包起来就不会用模板的解析方式解析,变量的来源有三种,用assign方法赋值,系统保留 ...

  10. asp.net 下OnClientClick的妙用

    一. OnClick是button的服务器端事件 OnClientClick是button的客户端事件 onlick时发生postback,执行后台代码.onclientclick,就是执行javas ...