c++ - UPX 是否神奇地将二进制文件从动态链接转换为静态链接库?

标签 c++ qt dynamic static upx

我正在尝试在 gnu/linux amd64 上使用静态库构建基于 qt 的软件但没有成功(qt 是成功静态构建的)。

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

提前致谢

编辑

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

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

感谢您的回答。

最佳答案

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

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

然而,由于 UPX 的工作方式,file 之类的工具只会看到一个小的静态链接 stub 。 这是UPX的解压套路。

当您启动一个用 UPX 压缩的程序时,这个 stub 将首先运行(而不是程序的正常 main 函数)。 stub 本身是静态链接的,但它随后会解压缩您的程序,为您的程序加载动态库,并正常启动它。因此你仍然需要动态库在那里,否则你的程序在解压后将无法正确加载。

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

关于c++ - UPX 是否神奇地将二进制文件从动态链接转换为静态链接库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740625/

相关文章:

c++ - 如何仅在文件不存在时创建文件?

c++ - "int[]"这里: "std::void_t<int[static_cast<Int>(-1) < static_cast<Int>(0)]>;"的目的是什么

mysql - MySQL 上的 Qt 事务回滚失败

android - 如何在Android中动态设置布局参数?

c++ - 无符号整数和颜色

c++ - 从 n3290 指向 :alignment

ruby - 在 qtruby 中处理事件

c++ - 使用发射与调用信号,就好像它是 Qt 中的常规函数​​一样

c# - 如何获取表单上的所有标签并将具有特定名称模式的标签的 Text 属性设置为 string.empty?

jsf - 以编程方式实例化 ValueExpression