小程序:獲取動態庫/程序依賴的全部動態庫

轉載請註明出處:http://blog.csdn.net/jmppok/article/details/17716803python


在編寫一個動態庫時,可能會引用一些第三方的動態庫。而在非開發環境中運行時,必須拷貝全部依賴的動態庫,不然程序沒法運行。咱們能夠經過ldd命令查看依賴的動態庫信息,但一個個查看,拷貝十分繁瑣。並且若是依賴的動態庫又依賴其餘動態庫,問題就會變得十分混亂。做者經過一個Python小程序來幫助簡化這個問題。正則表達式

1.使用

getlibs.py  lib  libs_dir小程序

經過運行該py程序,會拷貝指定lib所依賴的全部動態庫到指定目錄(libs_dir)測試

可經過./libs文件,設置正則表達式,只拷貝須要的那些lib。.net

2.原理

原理很是簡單:code

(1.經過python的os調用ldd命令,分析lib依賴的全部動態庫;blog

(2.針對這些依賴的lib,第歸調用ldd,分析;ip

(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.測試

相關文章
相關標籤/搜索