Ubuntu下QT程序打包(直接拷贝动态库和可执行文件)

2023-11-20

系统为Ubuntu16.04LTS,QT版本为5.12.9
QT默认为动态编译,生成的可执行文件需要有依赖库才能运行,因此在打包的时候需要把程序的依赖库一块打包,这样子做会导致打包的程序非常大,因为依赖库也都一块拷贝了,这种方法好处是快捷,不需要额外的工具。

查看程序依赖库

使用ldd命令查看程序依赖库
在这里插入图片描述

拷贝依赖库

在看其它博客的时候,其它人用的是这样一个脚本

#!/bin/sh
exe="ServerDecode"
des="./ServerDecodeLib"
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
echo $deplist
#cp $deplist $des

这个脚本,只能拷贝到依赖第一层的库,例如程序依赖库A,然后库A又连接到了B上或是依赖B,用这个脚本就只能拷贝到库A,那么当程序移植到另外一台机子上,如果另外一台机子上没有库B,或是库B的位置与A连接的位置不同,就会找不到库,程序无法运行。
这里用的是一个笨方法,将用ldd获得的依赖拷贝下来,就像这样

/usr/lib/libCypher4SLP.so.1
/opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Charts.so.5
/opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Widgets.so.5
/opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Gui.so.5
/opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Network.so.5
/opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Core.so.5
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/lib/x86_64-linux-gnu/libgcc_s.so.1
/lib/x86_64-linux-gnu/libpthread.so.0
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/lib/x86_64-linux-gnu/libm.so.6
/lib/x86_64-linux-gnu/libz.so.1
/lib/x86_64-linux-gnu/libdl.so.2
/opt/Qt5.12.9/5.12.9/gcc_64/lib/libicui18n.so.56
/opt/Qt5.12.9/5.12.9/gcc_64/lib/libicuuc.so.56
/opt/Qt5.12.9/5.12.9/gcc_64/lib/libicudata.so.56
/usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0
/lib/x86_64-linux-gnu/libglib-2.0.so.0
/lib64/ld-linux-x86-64.so.2
/lib/x86_64-linux-gnu/libexpat.so.1
/usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0
/usr/lib/x86_64-linux-gnu/libxcb-present.so.0
/usr/lib/x86_64-linux-gnu/libxcb-sync.so.1
/usr/lib/x86_64-linux-gnu/libxshmfence.so.1
/usr/lib/x86_64-linux-gnu/libglapi.so.0
/usr/lib/x86_64-linux-gnu/libXext.so.6
/usr/lib/x86_64-linux-gnu/libXdamage.so.1
/usr/lib/x86_64-linux-gnu/libXfixes.so.3
/usr/lib/x86_64-linux-gnu/libX11-xcb.so.1
/usr/lib/x86_64-linux-gnu/libX11.so.6
/usr/lib/x86_64-linux-gnu/libxcb-glx.so.0
/usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0
/usr/lib/x86_64-linux-gnu/libxcb.so.1
/usr/lib/x86_64-linux-gnu/libXxf86vm.so.1
/usr/lib/x86_64-linux-gnu/libdrm.so.2
/lib/x86_64-linux-gnu/libpcre.so.3
/usr/lib/x86_64-linux-gnu/libXau.so.6
/usr/lib/x86_64-linux-gnu/libXdmcp.so.6

然后使用cp将所有动态库拷贝到库文件夹里,由于多层嵌套的依赖库,它们的名字一般只有后缀会不同,就像这样
在这里插入图片描述
因此只需要在依赖库名后面加上通配符*,就可以将所有的依赖库都拷贝过俩了,拷贝的时候需要加上-d保留软连接,写一个脚本来一键完成拷贝

#!/bin/sh
cp /usr/lib/libCypher4SLP.so.1*	 ./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Charts.so.5*	./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Widgets.so.5* 	./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Gui.so.5* 	./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Network.so.5* 	./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Core.so.5* 	./  -rdf
cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6* 	./  -rdf
cp /lib/x86_64-linux-gnu/libgcc_s.so.1* 				./  -rdf
cp /lib/x86_64-linux-gnu/libpthread.so.0*               ./  -rdf
cp /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1*           ./  -rdf
cp /lib/x86_64-linux-gnu/libm.so.6*                     ./  -rdf
cp /lib/x86_64-linux-gnu/libz.so.1*                     ./  -rdf
cp /lib/x86_64-linux-gnu/libdl.so.2                     ./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libicui18n.so.56*    ./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libicuuc.so.56*      ./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libicudata.so.56*    ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0*       ./  -rdf
cp /lib/x86_64-linux-gnu/libglib-2.0.so.0*              ./  -rdf
cp /lib64/ld-linux-x86-64.so.2*                         ./  -rdf
cp /lib/x86_64-linux-gnu/libexpat.so.1*                 ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0*          ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb-present.so.0*       ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1*          ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxshmfence.so.1*         ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libglapi.so.0*             ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXext.so.6*              ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXdamage.so.1*           ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXfixes.so.3*            ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1*           ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libX11.so.6*               ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0*           ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0*          ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb.so.1*               ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1*           ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libdrm.so.2*               ./  -rdf
cp /lib/x86_64-linux-gnu/libpcre.so.3*                  ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXau.so.6*               ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXdmcp.so.6*             ./  -rdf

执行脚本后用ll查看动态库,会看到有一部分动态库的软连接是红色的,这说明这个动态库没有被拷贝过来,这是因为按上面的方式,直接用统配符来统一拷贝依赖库,有时候会因为依赖库的命名并不相同,例如下图的情况
在这里插入图片描述libpthread.so.0连接到libpthread-2.23.so,直接使用通配符是找不到libpthread-2.23.so的,因此需要修改脚本将它们一块拷贝过来
修改后脚本

#!/bin/sh
cp /usr/lib/libCypher4SLP.so.1*	 ./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Charts.so.5*	./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Widgets.so.5* 	./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Gui.so.5* 	./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Network.so.5* 	./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Core.so.5* 	./  -rdf
cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6* 	./  -rdf
cp /lib/x86_64-linux-gnu/libgcc_s.so.1* 				./  -rdf
cp /lib/x86_64-linux-gnu/libpthread.so.0 /lib/x86_64-linux-gnu/libpthread-2.23.so               ./  -rdf
cp /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1*           ./  -rdf
cp /lib/x86_64-linux-gnu/libm.so.6        /lib/x86_64-linux-gnu/libm-2.23.so               ./  -rdf
cp /lib/x86_64-linux-gnu/libz.so.1*                     ./  -rdf
cp /lib/x86_64-linux-gnu/libdl.so.2   /lib/x86_64-linux-gnu/libdl-2.23.so                  ./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libicui18n.so.56*    ./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libicuuc.so.56*      ./  -rdf
cp /opt/Qt5.12.9/5.12.9/gcc_64/lib/libicudata.so.56*    ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0*       ./  -rdf
cp /lib/x86_64-linux-gnu/libglib-2.0.so.0*              ./  -rdf
cp /lib64/ld-linux-x86-64.so.2  /lib/x86_64-linux-gnu/ld-2.23.so                        ./  -rdf
cp /lib/x86_64-linux-gnu/libexpat.so.1*                 ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0*          ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb-present.so.0*       ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1*          ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxshmfence.so.1*         ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libglapi.so.0*             ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXext.so.6*              ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXdamage.so.1*           ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXfixes.so.3*            ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1*           ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libX11.so.6*               ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0*           ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0*          ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libxcb.so.1*               ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1*           ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libdrm.so.2*               ./  -rdf
cp /lib/x86_64-linux-gnu/libpcre.so.3*                  ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXau.so.6*               ./  -rdf
cp /usr/lib/x86_64-linux-gnu/libXdmcp.so.6*             ./  -rdf

尝试移植、出现的报错及解决方法

拷贝完成后用zip指令将可执行文件、动态连接库压缩在一起,zip压缩默认会破坏掉软连接,因此需要加上-y保留软连接,压缩后在包里查看是看不到软连接的,解压后软连接会再次出现
在这里插入图片描述
将包放到另外一台电脑上,这个时候大概率是无法运行的,会出现一系列的报错

error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file: No such file or directory

出现这样的报错,有两种情况:这个库没拷贝、拷贝了但是程序任然没有找到这个库。如果么有这个拷贝到库,那就按上文的方法进行拷贝;如果库存在但是程序没有找到库,这种情况,就需要添加环境变量LD_LIBRARY_PATH,添加动态库的查找地址export LD_LIBRARY_PATH=./lib
在打开,一般来讲就能够找到库了。或者是用下面这段脚本来打开可执行文件

#!/bin/sh  
appname=`basename $0 | sed s,\.sh$,,`  
dirname=`dirname $0`  
tmp="${dirname#?}"  
if [ "${dirname%$tmp}" != "/" ]; then  
dirname=$PWD/$dirname  
fi  
LD_LIBRARY_PATH=$dirname  
export LD_LIBRARY_PATH=./lib  
$dirname/$appname "$@"

其实这段脚本最关键的也就是这句话,export LD_LIBRARY_PATH=./lib,设置环境变量LD_LIBRARY_PATH,添加动态连接库地址,确保程序能够找到我们拷贝的库

使用ldd命令可以查看到程序依赖库的状况,如果是not found,或是出现一系列错误,例如:

./platforms/libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5: version `Qt_5_PRIVATE_API’ not found (required by ./platforms/libqxcb.so)

这样的错误,大概率也是依赖库不存在或是拷错了,需要重新拷贝一下

This application failed to start because it could not find or load the Qt platform plugin “xcb”.

Reinstalling the application may fix this problem.

Aborted

这个错误的原因是qt5的新特性导致的,最终的解决办法在工程目录创建platforms目录,然后把安装qt5的目录的lib所在目录的同一级目录的plugins/platforms里面的libqxcb.so拷贝到刚才新建的platforms目录,但是拷贝后,也可能会出现后续的问题

qt.qpa.plugin: Could not load the Qt platform plugin “xcb” in “” even though it was found.

This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb.

Aborted (core dumped)

这个问题,其实也是依赖库出问题导致的,ldd查看platforms/libqxcb.so,缺少什么依赖库就把什么拷贝过来

总结

最终程序包内容如下
在这里插入图片描述

移植的过程中,出现了很多奇怪的问题,在网络上的各种解决方法,有时候能解决问题,有时候解决不了,可能解决了,但是新的问题又冒出来了。但是这些问题,本质上都是程序的依赖库出了问题,用ldd查看是哪个依赖库出现问题,将库都拷贝过去就能解决了
需要注意,此方法仅适用与ubuntu至ubuntu的QT程序移植,如果要把ubuntu下的qt程序拷贝到centos下,这个方法是不行的,两个系统的库不兼容

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu下QT程序打包(直接拷贝动态库和可执行文件) 的相关文章

  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • 使用 systemctl 获取 systemd 进程的正常运行时间或停机时间?

    喜欢使用systemctl is active
  • Qt中用于线程间通信的类设计

    问题陈述 用相机跟踪物体并相应地移动相机的方位角和仰角 Process 相机获取物体的图像 处理相机的每一帧以查找物体 应该被跟踪 并将每帧中生成的信息传递给机械设备 万向节 以平移和倾斜方式移动摄像机 Design 主 Gui 在一个线程
  • 使用终端时出现意外标记“(”附近的语法错误[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我试图为我的平板电脑获取一个 cpuid 该平板电脑变砖了 我有这段代码 当我通过终端在 ubuntu 上执行它时 它给出以下错误
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • vim 中的 python 2 支持

    我正在尝试设置 YouCompleteMe 一个 vim 代码完成插件 当我运行 vim 时 它给我这个错误消息 YouCompleteMe unavailable 需要 python 2 x 我的 ubuntu 机器上安装了正确版本的 p
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • 查看graphml文件

    我最近发现了一个 graphml 文件 但不知道如何从命令行打开它 我需要安装一些东西才能在 ubuntu 中从命令行查看此类文件吗 我尝试谷歌但找不到与此主题相关的任何结果 Graphml 是标准文件格式图表 yED 编辑器 http w
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 更改启动 Java 运行时后 IntelliJ IDEA 无法在 Ubuntu 上启动

    之前 我的 IntelliJ 运行得很好 但我使用的是 java 6 所以我的项目无法使用 gradle 运行 我用命令将java切换到版本8sudo update alternatives config java 我检查了java ver
  • 在汇编中使用 printf 会导致管道传输时输出为空,但可以在终端上使用

    无输出 https stackoverflow com questions 54507957 printf call from assembly do not print to stdout即使在终端上 当输出不包含换行符时也有相同的原因
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • QFileSystemModel setRootPath

    我正在尝试创建一个 Qt 应用程序来显示文件夹 Mac OS 中的 Users 文件夹 的内容 这是代码 QFileSystemModel dirModel new QFileSystemModel dirModel gt setRootP
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 关键字“if”如何测试一个值是真还是假?

    在 bash 脚本中 if 1 then echo Yes else echo No fi Output Yes 它表示 1 被视为真值 但在代码中 word Linux letter nuxi if echo word grep q le
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • QML 列表视图拖放

    我想创建两个 qml 列表视图 可以执行两个功能 拖放一个列表中的项目以更改项目的顺序 跨列表拖放项目 项目将从一个列表中删除并添加到另一个列表中 根据 Qt 文档中的拖放示例 我决定创建两个访问同一列表模型的列表视图 列表模型中的每个项目

随机推荐

  • vue中element 的 el-table数据量大时,出现卡顿情况解决办法

    一 安装 npm install umy ui 二 引入js和css import umy ui lib theme chalk index css 引入样式 import UTable UTableColumn from umy ui V
  • 时间戳问题汇总

    大家好 我刚接触流媒体不久 现在遇到一个非常奇怪的问题 向各位大侠请假 请你们指点 问题是这样的 用一个 VLC 流媒体客户端 去请求流媒体服务器上的数据 但是获得的数据播放速度明显快于1倍速 大概是 timestamp 不对 不知道是服务
  • 关于Qos中常用的CIR、PIR、CBS、PBS、EBS的解释以及用法关系

    CIR Committed Information Rate 承诺信息速率 每秒可通过的速率 计量单位为Kbps 以bit 位为单位 如设置为500Kbps 每8bit位 1Byte 1Kbps 1024bit PIR Peak Infor
  • ERROR: Could not find a version that satisfies the requirement XXX解决方法

    出现问题 ERROR Could not find a version that satisfies the requirement XXX解决方法 找了很久终于找到能解决这种报错的方法了 直接选用pip源并且信任它的来源就可以解决这种问题
  • No grammar constraints (DTD or XML schema) detected for the document

    No grammar constraints DTD or XML schema detected for the document
  • ESP8266与手机App通信(STM32)

    认识模块 ESP8266是一种低成本的Wi Fi模块 可用于连接物联网设备 控制器和传感器等 它具有小巧 高度集成和低功耗的特点 因此在物联网应用中被广泛使用 ESP8266模块由Espressif Systems开发 具有单芯片的封装和多
  • case when 作为条件_sqlserver条件分支case when使用教程

    在sqlserver的条件分支case when有两种写法 1 case 字段 when 值 then 返回值 when 值2 then 返回值2 end 2 case when 条件1 then 返回值1 when 条件2 then 返回
  • 【翻译】 zswap 压缩交换缓存

    您知道吗 LWN net 是一份由订阅者支持的出版物 我们依靠订阅者来维持整个运作 请通过订阅来帮助我们 让 LWN 继续在网络上运行 2013年2月12日 本文由 Seth Jennings 投稿 交换是性能的最大威胁之一 即使在快速固态
  • mysql中的default_详解MySQL中default的使用

    详解MySQL中default的使用 发布时间 2020 10 03 17 50 29 来源 脚本之家 阅读 60 作者 子不语 wj NULL 和 NOT NULL 修饰符 DEFAULT 修饰符 AUTO INCREMENT 修饰符 N
  • unity的LOD组件

    本文转载自http blog csdn net huutu article details 52106468 LOD是Level Of Detais 的简称 多细节层次 在游戏场景中 根据摄像机与模型的距离 来决定显示哪一个模型 一般距离近
  • 电脑开机时按F几重装系统

    常使用电脑的朋友都清楚 电脑系统有时候会出现故障 如果是出现不能开机的情况就需重我们装系统 那么如果 重装系统f几进入呢 下面小编现在来为大家详细的介绍一下电脑重装系统开机按F几 一起往下看 工具 原料 系统版本 win7系统 品牌型号 联
  • linux内核学习(7)粗略走走kbuild Makefile编译流程

    今天看Makefile文件 我头大了 此Makefile非彼Makefile 里面多了很多内置命令 比如origin patsubst等等啦 这些都没听说过 更可恶的是 连网上都没有 可见 这是一件多么伤人的事情 分析这样的 真是让人折寿啊
  • Toad常用快捷键和缩写替换

    Toad常用快捷键 F8 调出以前执行的sql命令 F9 执行全部sql Ctrl T 补全table name 或者显示字段 alt 箭头上下 看sql history Ctrl Enter 直接执行当前选中的sql Ctrl Shift
  • 文件服务器恢复测试,基于文件传输中文件损坏检测和恢复办法.doc

    基于文件传输中文件损坏检测和恢复办法 基于文件传输中文件损坏检测和恢复办法 摘 要 在网络上文件传输是一种常见的应用 讨论在文件传输完成后检测错误和恢复数据的办法 关键词 文件传输 文件校验 恢复 中图分类号 TP3 文献标识码 A 文章编
  • Python3学习笔记之-第三方模块(Pillow)

    目录 前言 一 安装Pillow 二 操作图像 前言 在 pillow之前处理图形的库莫过于PIL 但是它支持到python2 7 年久失修 于是一群志愿者在PIL的基础上常见了pillow 支持python3 又丰富和功能特性 一 安装P
  • 百度会员租赁地址

    http xinjipin com 转载于 https www cnblogs com byfboke p 11602017 html
  • 10:00面试,10:04就出来了 ,问的实在是太...

    从外包出来 没想到竟然死在了另一家厂子 自从加入这家公司 每天都在加班 钱倒是给的不少 所以我也就忍了 没想到12月一纸通知 所有人都不许加班 薪资直降30 顿时有吃不起饭的赶脚 好在有个兄弟内推我去了一家互联网公司 兴冲冲见面试官 没想到
  • Maven搭建私有仓库(私服)

    Nexus简介 作为一个非常优秀且我找不到合适的替代品的二进制包储存库 功能也是非常强大 不单纯只能设置Maven私有仓库 包括我们常见的Yum Docker npm NuGel等等 专业版需要付费 个人用免费版就可以 专业版更加强大 专业
  • Communications link failure官网解释

    官网给的解释 https dev mysql com doc connector j 8 0 en connector j usagenotes troubleshooting html qandaitem 15 1 8 15 8 What
  • Ubuntu下QT程序打包(直接拷贝动态库和可执行文件)

    系统为Ubuntu16 04LTS QT版本为5 12 9 QT默认为动态编译 生成的可执行文件需要有依赖库才能运行 因此在打包的时候需要把程序的依赖库一块打包 这样子做会导致打包的程序非常大 因为依赖库也都一块拷贝了 这种方法好处是快捷