编译标志-static对gcc真正意味着什么 [英] What does compilation flag -static really means for gcc

查看:178
本文介绍了编译标志-static对gcc真正意味着什么的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如,我这样做:

${CROSS_COMPILE}gcc -static myinit.c -o myinit

我也是在没有静态的情况下这样做的:

Also I did this without static:

${CROSS_COMPILE}gcc  myinit.c -o myinit

在我的情况下没有任何效果,在两种情况下,二进制给出的结果相同.

There is no effect in my case, in both cases binary gives same result.

那么静态在这里的作用是什么?

So what is the role of static here?

这是我正在编译的程序:

Here is the program I am compiling:

#include <stdio.h>

int
main ()
{
    printf ("\n");
    printf ("Hello world from %s!\n", __FILE__);
    while (1) { }
    return 0;
}

${CROSS_COMPILE}arm-xilinx-linux-gnueabi-

推荐答案

$ ldd myinit
    linux-vdso.so.1 =>  (0x00007fff5dbfe000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7ec63ce000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7ec67c0000)
$ ldd myinit_static 
    not a dynamic executable


$ ll
total 884
drwxrwxr-x  2 jarod jarod   4096 Jun  7 16:00 ./
drwxr-xr-x 38 jarod jarod   4096 Jun  7 15:59 ../
-rwxrwxr-x  1 jarod jarod   8567 Jun  7 16:00 myinit*
-rw-rw-r--  1 jarod jarod    136 Jun  7 16:00 myinit.c
-rwxrwxr-x  1 jarod jarod 877388 Jun  7 16:00 myinit_static*

-static静态链接所有依赖项,因此您的二进制文件可以在未安装所有这些运行时的机器上运行

-static link all dependency statically, so your binary can run on a machine without all these runtime installed

这篇关于编译标志-static对gcc真正意味着什么的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆