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

来源:互联网 发布:数据分析与商务智能 编辑:程序博客网 时间:2024/04/27 23:19

转载请注明出处:http://blog.csdn.net/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/pythonmport os,sys,stringlib_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.测试


1 0
原创粉丝点击