Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

Gray-Ice

个人博客兼个人网站

手动拷贝Qt的依赖实非明智之举,于是我就做了个半自动拷贝依赖的脚本(之所以是半自动,是因为其中有一部分需要手动操作)。
那么脚本代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import os
import shutil


# create dir QDependLibrary
def createdir():
if not os.path.exists("./QDependLibrary"):
os.mkdir("./QDependLibrary")


def copy_lib(path):
# copy lib
shutil.copy(path, "./QDependLibrary/" + path[path.rfind("/"):])


def main():
with open("./dep.txt", "r") as f:
if not f:
f.close()
exit(0)
createdir()
while True:
deps = f.readline()
if deps:
lpos = deps.find("=> ")
rpos = deps.rfind(" (")
if lpos < 0 or rpos < 0:
continue
else:
target = deps[deps.find("=> ")+3: deps.rfind(" (")]
copy_lib(target)
# file end
else:
break

f.close()


if __name__ == '__main__':
main()

那么应该如何使用这个脚本呢?先使用这条命令获取你的Qt程序的依赖并将其保存为”dep.txt”:

1
ldd Qtprogram >> dep.txt

ldd会列出该程序的依赖,后面的>> dep.txt会将其输出重定向到文件。
然后我们假设上面的python代码名字是dp.py,那么现在将dp.py放在dep.txt的同级目录下,然后运行:

1
python3 dp.py

该脚本会自动逐行解析dep.txt的内容并将其中的库文件拷贝到同级目录下的QDependLibrary文件夹里,如果该文件夹不存在就新建一个。

拷贝过来的权限等与之前一致。
那么关于这个脚本的介绍就结束了。

现在是闲聊时间。

  1. 为什么用字符串内置方法解析库文件路径?
    一开始我做库文件路径解析的时候用的是re库,结果可劲儿报错,然后我发现引起报错的原因竟然是我的文本的问题???Excuse me?于是我心想拉倒吧,干脆自己拿str切片解析得了。
  2. 为什么用python来做自动拷贝脚本?
    本来我想用C语言的,因为C性能高嘛(虽然性能高在这里也没啥卵用)。但是想了想写出的代码别人拷贝下来还要编译属实不人道,于是就用python啦!用python可以直接执行命令来运行脚本,不像C还得编译一下,少了一道工序哦(老懒狗了)。
    那么本篇完。

评论



愿火焰指引你