C++ 编译标志-static对gcc真正意味着什么

C++ 编译标志-static对gcc真正意味着什么,c++,c,gcc,C++,C,Gcc,例如,我这样做: ${CROSS_COMPILE}gcc -static myinit.c -o myinit 我在没有静电干扰的情况下也这样做了: ${CROSS_COMPILE}gcc myinit.c -o myinit 在我的例子中没有效果,在这两种情况下,二进制给出相同的结果 那么静态的作用是什么呢 以下是我正在编译的程序: #include <stdio.h> int main () { printf ("\n"); printf ("Hello

例如,我这样做:

${CROSS_COMPILE}gcc -static myinit.c -o myinit
我在没有静电干扰的情况下也这样做了:

${CROSS_COMPILE}gcc  myinit.c -o myinit
在我的例子中没有效果,在这两种情况下,二进制给出相同的结果

那么静态的作用是什么呢

以下是我正在编译的程序:

#include <stdio.h>

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


${CROSS_COMPILE}是来自gcc手册页的arm xilinx linux gnueabi-

,用于强制库的静态链接。如果不支持动态链接,某些系统将始终静态链接

-静止的 在支持动态链接的系统上,这会阻止与共享 图书馆。在其他系统上,此选项无效

       This option will not work on Mac OS X unless all libraries (including libgcc.a)
       have also been compiled with -static.  Since neither a static version of
       libSystem.dylib nor crt0.o are provided, this option is not useful to most
       people.

静态链接所有依赖性静态,因此您的二进制可以在机器上运行,而没有安装所有这些运行时

。C++也使用了标记。你用G++和一个小的C++程序测试了吗?或者这和C++无关吗?@斯特凡,对不起,我没有用G++测试它。如果您认为这只是C语言特有的,请编辑。@user12799508我问过,因为这两种语言有很大的差异。这并不意味着编译器标志的行为有所不同,但您应该始终只使用您感兴趣的语言进行标志。@stefan OK!!以后我会处理这件事的。thanks@user2799508你为什么不在这段时间内删除这个不相关的标签?
$ 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*