文档章节

python动态加载so文件

a
 active_health
发布于 2017/04/28 10:55
字数 217
阅读 43
收藏 0
点赞 0
评论 0

解决方案1:

#!/usr/bin/env python

import os,sys,time,re
from ctypes import *

... ...

def function1():
    ... ...
    sStdPath = os.path.dirname(sStcPath) + "/libstdc++.so.6"
    stc_lib = CDLL(sStdPath)

解决方案二:

ctypes.cdll.LoadLibrary('/abs/path/to/a.so')
ctypes.cdll.LoadLibrary('/abs/path/to/b.so')

方案三:

Compile your binary with a rpath relative to the current working directory like:

gcc -shared -o yourbinary.so yoursource.c otherbinary.so \
    -Wl,-rpath='.',-rpath='./another/relative/rpath' -fpic

Then, you are able to change the working directory in python at runtime with:

import os
os.chdir('/path/to/your/binaries')

Like this, the loader also finds other dynamic libraries like otherbinary.so

 

LD_LIBRARY_PATH不生效的原因:

31down voteaccepted

By the time a program such as Python is running, the dynamic loader (ld.so.1 or something similar) has already read LD_LIBRARY_PATH and won't notice any changes thereafter. So, unless the Python software itself evaluates LD_LIBRARY_PATH and uses it to build the possible path name of the library for dlopen() or an equivalent function to use, setting the variable in the script will have no effect.

Given that you say it doesn't work, it seems plausible to suppose that Python does not build and try all the possible library names; it probably relies on LD_LIBRARY_PATH alone.

本文转载自:http://stackoverflow.com/questions/856116/changing-ld-library-path-at-runtime-for-ctypes

共有 人打赏支持
a
粉丝 0
博文 101
码字总数 75202
作品 0
浦东
云计算Python自动化:python文件类型讲解

Python的文件类型主要分为3种:源代码(source file)、字节码(byte-code file)、优化的字节码(optimized file)。这些代码都可以直接运行,不需要编译或者连接。这正是Python语言的特性,...

长沙千锋 ⋅ 05/16 ⋅ 0

个人总结——全面的『Python编码规范』

本文目的 『动态类型一时爽,代码重构火葬场』,说的是:动态语言在初期开发比较爽,但是到后期维护起来比较困难。Python 作为动态语言之一,自然也会有这样的缺点。其实说『火葬场』,也没有...

hezhiming ⋅ 05/18 ⋅ 0

Python 新功能:或将允许安全工具查看运行时操作

针对 Python 编程语言的新功能提议之一是希望为运行时添加“透明度”,并让安全和审计工具查看 Python 何时可能运行潜在危险的操作。 在当前的形式下,Python 不允许安全工具查看运行时正在执...

达尔文 ⋅ 05/30 ⋅ 0

iframe父子页面通讯解决方案

有两点要注意 onload加载完成再进行操作 子页面延时获取 场景是这样的,父级页面嵌套了多个iframe,report_six.html子级页面按需加载数量,且每个子页面渲染不同的数据。 父页面for循环加载子...

皇上洗碗 ⋅ 06/15 ⋅ 0

python 脚本的启动模式(python -m以模块方式启动)

今天再看python的项目时,发现GitHub中给出的python脚本的执行格式是python -m pip install somepackage。于是开始了python模式启动之旅。 其中很多相关借鉴了该博客,同时感谢博主:http://...

wonengguwozai ⋅ 05/28 ⋅ 0

手把手 | 哇!用R也可以跑Python了

     大数据文摘作品   编译:大茜、钱天培   R还是Python?   真是个千古难题!   如果你主要从事数据分析、统计建模和可视化,R大概是你的不二之选。但如果你还想来搞点深度学...

大数据文摘 ⋅ 04/19 ⋅ 0

Tensorflow第三课数据加载---非图片数据

哈哈哈,我又来更新了。我觉得tensorflow的数据处理部分不是很好写,总是会报错。然后在google上搜了好多博客,但是奥朵都是有关图片数据的加载。但是我想处理的不是图片数据,而是纯数据。于...

clever_wr ⋅ 05/12 ⋅ 0

django 1.8 官方文档翻译: 3-5-1 使用Django输出CSV

使用Django输出CSV 这篇文档阐述了如何通过使用Django视图动态输出CSV (Comma Separated Values)。 你可以使用Python CSV 库或者Django的模板系统来达到目的。 使用Python CSV库 Python自带了...

apachecn_飞龙 ⋅ 2015/09/04 ⋅ 0

用 Python 编写的 Python 解释器

(点击上方公众号,可快速关注) 翻译: qingyunha 英文:Allison Kaptur http://qingyunha.github.io/taotao/ Allison是Dropbox的工程师,在那里她维护着世界上最大的由Python客户组成的网络...

Python开发者 ⋅ 04/22 ⋅ 0

Python函数声明以及与其他编程语言数据类型的比较

1、函数声明 与其它大多数语言一样 Python 有函数,但是它没有像 C++ 一样的独立的头文件;或者像 Pascal 一样的分离的 interface / implementation 段。在需要函数时,像下面这样声明即可:...

光明辉煌 ⋅ 04/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部