linux 怎样编译程序不依赖 c ,如何编译c程序,使其不依赖于任何库?

似乎一个hello world程序依赖于几个库:

libc.so.6 => /lib64/libc.so.6 (0x00000034f4000000)

/lib64/ld-linux-x86-64.so.2 (0x00000034f3c00000)

我如何静态链接所有东西?

解决方法:

链接-static. “在支持动态链接的系统上,这可以防止与共享库的链接.”

编辑:是的,这将增加可执行文件的大小.您可以选择两条路线,或者执行Marco van de Voort建议的路线(-nostdlib,烘焙您自己的标准库或找到最小的库).

另一种方法是尝试让GCC尽可能地删除.

gcc -Wl,--gc-sections -Os -fdata-sections -ffunction-sections -ffunction-sections -static test.c -o test

strip test

在我的机器上将小测试从~800K减少到~700K,因此减少的幅度并不大.

Update2:如果您满足于仅使用系统调用,则可以使用gcc -ffreestanding -nostartfiles -static来获取非常小的可执行文件.

试试这个文件(small.c):

#include

void _start() {

char msg[] = "Hello!\n";

write(1, msg, sizeof(msg));

_exit(0);

}

编译使用:gcc -ffreestanding -nostartfiles -static -o small small.c&&小条.这会在我的系统上生成一个~5K的可执行文件(它仍然有一些应该是可剥离的部分).如果你想进一步了解this指南.

标签:c-3,linux,gcc,static-linking

来源: https://codeday.me/bug/20190723/1515355.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值