NPM是否神奇地将二进制文件从动态链接到静态链接库?

时间:2013-12-23 09:33:02

标签: c++ qt dynamic static upx

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

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

提前致谢

修改

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

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

感谢您的回答。

1 个答案:

答案 0 :(得分:2)

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

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

然而,由于UPX的工作方式,像file这样的工具只会看到一个小的静态链接存根。 这是UPX的减压程序。

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

正如你可能已经猜到的那样,它实际上并不神奇,只是隐藏了一些东西以保持尺寸不变。如果您仍然遇到其他库的问题,您应该考虑打开另一个问题。