UPX能否将动态链接的二进制文件变成静态链接库?

5
我试图在gnu/linux amd64上使用静态库构建基于qt的软件,但没有成功(qt已成功地静态构建)。现在我看到有些人正在使用UPX。因此,我尝试了动态构建,确实,“file”命令将二进制文件识别为静态链接。我能相信它吗?我应该考虑改用statifier吗?
谢谢您提前回答。
编辑
抱歉,我的表述不够清晰。我正试图使用QT框架构建应用程序,但构建脚本很复杂,并且是为共享库而设计的。我能够在动态链接的二进制文件中构建应用程序,它可以正常工作,但我想得到一个带有静态链接库的二进制文件。我尝试了UPX软件(http://upx.sourceforge.net/),因为我在其他主题中看到它被用于将具有动态库的二进制文件转换为具有静态库的二进制文件。
但这对我来说似乎太神奇了,它真的有效吗,还是只是隐藏了一些东西,让linux认为二进制文件现在是静态链接的?
谢谢你的回答。

QT有什么问题? - egur
你遇到的确切问题是什么?使用的平台是什么? - Kuba hasn't forgotten Monica
你使用的是哪个构建系统?为什么不直接将静态关键字传递给底层编译器,而要使用upx呢? - László Papp
1个回答

3
不,UPX不会将动态链接的程序转换为静态链接的程序。
UPX是一个可执行文件压缩器。它不会使您的程序静态链接,因为这实际上会增加其大小,而UPX的目标是压缩。
然而,由于UPX的工作方式,像“file”这样的工具只会看到一个小的静态链接存根。这是UPX的解压缩例程。
当您启动使用UPX压缩的程序时,这个存根将首先运行(而不是您程序的正常“main”函数)。存根本身是静态链接的,但它将解压缩您的程序,加载您程序的动态库,并正常启动它。因此,在解压缩后,您仍需要动态库存在,否则您的程序将无法正确加载。
因此,可能你已经猜到了,这并不是魔术,只是隐藏一些东西以保持大小不变。如果您仍然遇到这些其他库的问题,请考虑提出另一个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接