c++ - 在 libc.so的动态依赖中,C++ 使用 static static libstdc++进行编译

  显示原文与译文双语对照的内容

我想让一个可以移植的可以执行文件。 删除了一些依赖项之后,在另一个系统上运行二进制文件时,我遇到以下问题:


/lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.15' not found (required by foob)


/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by foob)


/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by foob)



我希望我的二进制文件不需要用户升级他们的libc,所以我想同时删除这个依赖项。

生成上述二进制文件的链接器标志已经包含了 -static-libgcc -static-libstdc++ 。 为什么二进制文件仍然需要共享的libc.so.6?

我试着添加 -static 标志,但是当我尝试运行 binary结果是非常奇怪的:


$ ls -l foob


-rwxr-xr-x 1 claudiu claudiu 13278191 Oct 10 13:03 foob


$./foob


bash:./foob: No such file or directory



怎么办?

编辑:


$ file foob


foob: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=5adee9a598b9261a29f1c7b0ffdadcfc72197cd7, not stripped


$ strace -f./foob


execve("./foob", ["./foob"], [/* 64 vars */]) = -1 ENOENT (No such file or directory)


write(2,"strace: exec: No such file or di"..., 40strace: exec: No such file or directory


) = 40


exit_group(1) =?


+++ exited with 1 +++



如果不使用 ldd - -static,则使用 version,它有两个比带有 -static的版本更小的条目:


libstdc++.so.6 =>/usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f420c1000)


libgcc_s.so.1 =>/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f41636000)



时间: 作者:

...