转载请注明出处:http://blog.csdn.net/jmppok/article/details/17716803python
在编写一个动态库时,可能会引用一些第三方的动态库。而在非开发环境中运行时,必须拷贝全部依赖的动态库,不然程序没法运行。咱们能够经过ldd命令查看依赖的动态库信息,但一个个查看,拷贝十分繁琐。并且若是依赖的动态库又依赖其余动态库,问题就会变得十分混乱。做者经过一个Python小程序来帮助简化这个问题。正则表达式
getlibs.py lib libs_dir小程序
经过运行该py程序,会拷贝指定lib所依赖的全部动态库到指定目录(libs_dir)测试
可经过./libs文件,设置正则表达式,只拷贝须要的那些lib。.net
原理很是简单:code
(1.经过python的os调用ldd命令,分析lib依赖的全部动态库;blog
(2.针对这些依赖的lib,第归调用ldd,分析;ip
(3.将符合条件的lib,拷贝至指定目录。开发
#!/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])