小程序:获取动态库/程序依赖的所有动态库

本文介绍了一个Python脚本工具,用于批量拷贝指定动态库及其所有依赖项。通过递归调用ldd命令,该工具能有效地解决在非开发环境中运行程序时所需的所有动态库拷贝问题。
部署运行你感兴趣的模型镜像

转载请注明出处:http://blog.youkuaiyun.com/jmppok/article/details/17716803


在编写一个动态库时,可能会引用一些第三方的动态库。而在非开发环境中运行时,必须拷贝所有依赖的动态库,否则程序无法运行。我们可以通过ldd命令查看依赖的动态库信息,但一个个查看,拷贝十分繁琐。而且如果依赖的动态库又依赖其他动态库,问题就会变得十分混乱。作者通过一个Python小程序来帮助简化这个问题。

1.使用

getlibs.py  lib  libs_dir

通过运行该py程序,会拷贝指定lib所依赖的所有动态库到指定目录(libs_dir)

可通过./libs文件,设置正则表达式,只拷贝需要的那些lib。

2.原理

原理非常简单:

(1.通过python的os调用ldd命令,分析lib依赖的所有动态库;

(2.针对这些依赖的lib,第归调用ldd,分析;

(3.将符合条件的lib,拷贝至指定目录。

3.代码

#!/usr/bin/python
mport os,sys,string

lib_patterns=[]
def loadLibPattens():
        f = open("libs");
        global lib_patterns
        lib_patterns = f.readlines();
        f.close()

def getlibs(lib,dir):
        libs = os.popen("ldd "+lib).readlines()
        for line in libs:
                line = line.strip('\n')
                line = line.strip('\t')
                index = line.find(" => ")
                if(index < 0):
                        continue
                libName = line[0:index]
                libPath = line[index+4:]
                libPath = libPath[0:libPath.find(" (")]

                for l in lib_patterns:
                        l = l.strip('\n')
                        if(libName.find(l) >= 0):
                                #print libName, l
                                os.popen("cp "+libPath+" "+dir)
                                getlibs(libName,dir)






if __name__=='__main__':
        if(len(sys.argv)<3):
                print "Usage: get_files_in_vcxproj.py  file"
        else:
                loadLibPattens()
                getlibs(sys.argv[1],sys.argv[2])

4.测试


您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值