UPX 是否神奇地将二进制文件从动态链接转换为静态链接的 libarires?

use*_*066 5 c++ qt static dynamic upx

我试图在 gnu/linux amd64 上构建一个带有静态库的基于 qt 的软件,但没有成功(qt 是成功静态构建的)。

现在我看到有人在使用UPX。所以我尝试了动态构建,实际上,“文件”命令将二进制文件识别为静态链接。我可以相信它吗?我应该考虑使用 statifier 代替吗?

提前致谢

编辑

抱歉,我说得不够清楚。我正在尝试使用 QT 框架构建一个应用程序,但构建脚本很复杂并且是为共享库制作的。我能够在动态链接的二进制文件中构建应用程序,它正在工作,但我想获得带有静态链接库的二进制文件。我尝试了 UPX 软件(http://upx.sourceforge.net/),正如我在其他主题中看到的那样,它用于将带有动态库的二进制文件转换为带有静态库的二进制文件。

但这对我来说似乎太神奇了,它真的有效还是只是隐藏了一些东西并且linux认为二进制文件现在是静态链接的?

感谢您的回答。

tux*_*ux3 3

不,UPX 不会将动态链接的程序转换为静态链接的程序。

UPX 是可执行文件的加壳器。它不会使您的程序静态链接,因为这实际上会增加其大小,而 UPX 的目标是压缩。

然而,由于 UPX 的工作方式,类似的工具file只会看到一个小的静态链接存根。这就是UPX的解压例程。

当您启动使用 UPX 压缩的程序时,此存根将首先运行(而不是main程序的正常功能)。存根本身是静态链接的,但它会解压缩您的程序,加载程序的动态库,并正常启动它。因此,您仍然需要动态库,否则您的程序在解压缩后将无法正确加载。

正如您可能已经猜到的那样,它实际上并不是魔法,它只是隐藏了一些东西以缩小尺寸。如果您对其他库仍然有问题,您应该考虑提出另一个问题。