相关疑难解决方法(0)

使用-static-libgcc -static-libstdc ++进行编译仍会导致对libc.so的动态依赖

我正在尝试制作尽可能便携的可执行文件.删除一些依赖项后,我在另一个系统上运行二进制文件时遇到以下情况:

/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)
Run Code Online (Sandbox Code Playgroud)

我更喜欢我的二进制文件不要求用户升级他们的libc版本,所以我也想删除这个依赖项.

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

我也尝试添加-static标志,但是当我尝试运行二进制文件时,结果非常奇怪:

$ ls -l foob
-rwxr-xr-x 1 claudiu claudiu 13278191 Oct 10 13:03 foob
$ ./foob
bash: ./foob: No such file or directory
Run Code Online (Sandbox Code Playgroud)

该怎么办?

编辑:

$ file foob
foob: ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), …
Run Code Online (Sandbox Code Playgroud)

c c++ gcc glibc static-linking

23
推荐指数
1
解决办法
3万
查看次数

如何链接到其他libc文件?

我想提供共享库以及我的程序,而不是由于版本差异而使用目标系统.

ldd 说我的程序使用这些共享库:

linux-gate.so.1 =>  (0xf7ef0000)**(made by kernel)**  
libc.so.6 => /lib32/libc.so.6 (0xf7d88000)**(libc-2.7.so)**  
/lib/ld-linux.so.2 (0xf7ef1000)**(ld-2.7.so)**
Run Code Online (Sandbox Code Playgroud)

我通过编译成功链接了ld-xxx.so:

gcc -std=c99 -D_POSIX_C_SOURCE=200112L -O2 -m32 -s -Wl,-dynamic-linker,ld-2.7.so myprogram.c
Run Code Online (Sandbox Code Playgroud)

但我没有成功的链接libc-xxx.so.我怎样才能做到这一点 ?

c linker gcc libc ld

9
推荐指数
2
解决办法
1万
查看次数

标签 统计

c ×2

gcc ×2

c++ ×1

glibc ×1

ld ×1

libc ×1

linker ×1

static-linking ×1