0
我想将Ubuntu 16.04(例如zbackup)上的程序编译为可以在BusyBox Linux上运行的单个fat二进制文件。使用定制的CMAKE脚本,我将以下选项链接起来,这些选项似乎使二进制增长到4MB +。这没关系,似乎事情正在被推向二进制。glibc链接导致更小的二进制文件被破坏
-lcrypto
-lz
-ldl
-static-libstdc++
-static-libgcc
接下来,我尝试添加-static
标志,这样我可以包括但其中缺少最后一块时,我添加了-static
选项,然后重新编译的二进制是在大约2MB +实际上更小,它是坏了。当我尝试运行二进制文件时,它只是说file or folder not found
我似乎无法确定为什么-static
选项导致输出二进制文件被破坏。
在你的构建中,你有没有像warning这样的警告:“警告:在静态链接的应用程序中使用'dlopen'需要在运行时从glibc版本的共享库用于链接”? – Eric
用-static做一个'objdump -t',一个用二进制不做,然后做一个diff。这听起来像-static导致libstdC++和libgcc不能链接进来。 – user2766918
@eric当在目标busybox上运行工作二进制文件(不带-static)时,它会给出错误'/lib/libc.so.6:version 'GLIBC_2.7'找不到',但只是没有找到破损的二进制文件或文件夹(使用-static)。编译时CMAKE不显示任何错误输出。 @ user2766918 objdump的输出对于这两个文件都很大。不知道从哪里开始的差异显示的文本山(约10页) – pieterk