缘起

安装python的包Rtree(Rtree-0.8.2),但需要先安装C语言依赖包spatialindex-src(spatialindex-src-1.8.5)。在安装完spatialindex-src后,再安装Rtree过程中出现问题:

dimite@ubuntu:~/wzh/Rtree-0.8.$ python setup.py build
Traceback (most recent call last):
File "setup.py", line , in <module>
import rtree
File "/home/dimite/wzh/Rtree-0.8.2/rtree/__init__.py", line , in <module>
from .index import Rtree
File "/home/dimite/wzh/Rtree-0.8.2/rtree/index.py", line , in <module>
from . import core
File "/home/dimite/wzh/Rtree-0.8.2/rtree/core.py", line , in <module>
rt = ctypes.CDLL(lib_name)
File "/usr/lib/python2.7/ctypes/__init__.py", line , in __init__
self._handle = _dlopen(self._name, mode)
OSError: libspatialindex_c.so.: cannot open shared object file: No such file or directory

错误日志提示找不到动态链接库 libspatialindex_c.so.4,利用命令寻找动态链接库

dimite@ubuntu:~/wzh/Rtree-0.8.$ sudo find / -name libspatialindex_c.so.
[sudo] password for dimite:
/usr/local/lib/libspatialindex_c.so.
/home/dimite/wzh/spatialindex-src-1.8./.libs/libspatialindex_c.so.

需要四个动态链接库文件,都在/usr/local/lib中

dimite@ubuntu:~/wzh/Rtree-0.8.$ ls /usr/local/lib | grep libspatialindex | grep so
libspatialindex_c.so
libspatialindex_c.so.
libspatialindex_c.so.4.0.
libspatialindex.so
libspatialindex.so.
libspatialindex.so.4.0.

解决

方法一:
把动态链接库所在的路径添加到/etc/ld.so.conf中

include /etc/ld.so.conf.d/*.conf
/usr/local/lib/

然后更新/etc/so.cache

sudo  ldconfig

方法二:
同方法一,把具体的so链接库写到/etc/ld.so.conf.d/下的conf文件中

/usr/local/lib/

方法三:
设置$LD_LIBRARY_PATH=库所在目录(多个目录用:分隔)

结论

以root身份把库路径加入到/etc/ld.so.conf或在/etc/ld.so.conf.d中创建特定的.conf文件,运行ldconfig更新动态链接库

设置$LD_LIBRARY_PATH=库所在目录(多个目录用:分隔)

深究

python怎么调用c的库

python的setup.py 怎么执行,里边没有看到具体的build、install字眼

ctype里的__init__.py又是怎么和动态链接库a联系在一起

【未完待补充】linux 设置So动态库链接路径的更多相关文章

  1. Linux下包含头文件的路径问题与动态库链接路径问题

    C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径.自己指定的路径就不说了,这里说明一下系统自动搜索的路径. [1 ...

  2. linux和windows动态库加载路径区别

    # linux和windows动态库加载路径区别 ### 简介------------------------------ linux加载动态库的路径是系统目录/lib和/usr/lib.- wind ...

  3. 【转】分析Linux和windows动态库

    原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Lin ...

  4. Linux和windows动态库

    转载:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 态链接库技术实现和设计程序常用的技术,在Windows和Linux系 统中 ...

  5. 【转载】Linux动态库搜索路径的技巧

    转自:http://soft.chinabyte.com/os/232/11488732_2.shtml 众所周知,Linux动 态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都 ...

  6. Linux动态库搜索路径的技巧

    众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径 ...

  7. Linux下动态库查找路径的问题

    说到和动态库查找路径相关的问题,总体上可以分为两类:    第一类: 通过源代码编译程序时出现的找不到某个依赖包的问题,而如果此时你恰好已经按照它的要求确确实实.千真万确.天地良心地把依赖库给装好了, ...

  8. 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH

    谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH  PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...

  9. 谈谈Linux下动态库查找路径的问题

    学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续"上路".回想起自己当年刚接触Linux时,不管是用源码包编译程序,还是程序运行时出现的和动态库的各种恩恩怨怨,心里 ...

随机推荐

  1. 用Editplus开发HTML

    准备工作 设置Editplus默认的打开浏览器为系统默认浏览器 取消Editplus的临时缓存文件 ☆ 设置不生成临时文件 这里的临时文件,指的是.bak文件,当你在Editplus下修改任意一个文件 ...

  2. Apache Spark源码走读之20 -- ShuffleMapTask计算结果的保存与读取

    欢迎转载,转载请注明出处,徽沪一郎. 概要 ShuffleMapTask的计算结果保存在哪,随后Stage中的task又是如何知道从哪里去读取的呢,这个过程一直让我困惑不已. 用比较通俗一点的说法来解 ...

  3. Ubuntu+Nginx+PHP的最简搭建方法

    先安装: sudo apt-get install nginx php5-fpm -y 然后编辑配置文件: /etc/nginx/site-available/default 找到"loca ...

  4. java--字符串替换replace,replaceAll,replaceFirst

    1.字符串替换,replace string s="abcdfersabcdsgacabc"; 将字符串中的abc替换成bdf s.replace("abc", ...

  5. px_ipc_name.c

    /* include px_ipc_name */ #include "unpipc.h" char * px_ipc_name(const char *name) { char ...

  6. url匹配和match()方法

    下面的全局匹配可以找到字符串中的所有数字: "1 plus 2 equals 3".match(/\d+/g) // 返回 ["1", "2" ...

  7. BLE蓝牙的广播类型

    广播的类型一般分为四种,见如下表格: 1. 可连接的非定向广播(Connectable Undirected Event Type): 这是一种用途最广的广播类型,包括广播数据和扫描响应数据,它表示当 ...

  8. 【翻译】How To Tango With Django 1.5.4 第一章

    1.概览 这本书的目的就是为了给你提供Django实战开发的指导,这本书主要是为学生设计的,它提供了开发并运行第一个web应用程序的详细的指导步骤,并且指导你怎么将它发布到web服务器上. 本书就是为 ...

  9. su terminal get around---docker root

    su : must be run from a terminal After some googling, I found the solution from Tero's glob. If you ...

  10. ubuntu 14 安装 JDK

    $ sudo mkdir /usr/lib/java $ sudo tar zxvf jdk-7u21-linux-i586.tar.gz -C /usr/lib/java $ cd /usr/lib ...