G ++编译器:选项-s已过时且被忽略C++

Tie*_*eme 5 c++ macos g++

我正在尝试使用g ++编译器(Mac OSX上的4.6.0)在C++中编译和删除一个非常简单的程序.但在编译时我得到了一个警告.


源代码:

#include </usr/local/Cellar/gcc/4.6.0/gcc/include/c++/4.6.0/iostream>

int main(){
    std::cout << ("Hello World\n") ;
}
Run Code Online (Sandbox Code Playgroud)

终端代码:

g++ hello.cc -Wall -std=c++0x -s
    /* or an alternative: */
g++ hello.cc -Wall -std=c++0x -o test -Wl,-s
Run Code Online (Sandbox Code Playgroud)

编译器警告:

ld: warning: option -s is obsolete and being ignored
Run Code Online (Sandbox Code Playgroud)

有人对这个奇怪的警告有任何想法吗?

编辑:

奇怪的是,使用-s标志时,大小确实减少,从9,216字节减少到9,008.

但是当我使用以下内容时,大小减少到8,896字节.

cp hello hello_stripped
strip hello_stripped
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 5

错误消息来自ld,而不是来自gccg++.(gccg++命令是调用编译器,链接器和其他工具的驱动程序.)

gcc-s选项传递给链接器,如gcc 4.6.1手册中所述 ; 显然MacOS端口gcc仍然这样做.

GNU链接器(GNU ld)仍然接受-s具有其通常含义的选项.但MacOS链接器(也称为ld)忽略它,如MacOS ld手册中所述:

-s完全剥离输出,包括删除符号表.不再支持此文件格式变体.此选项已过时.

与GNU的gcc手册不同,MacOS gcc手册没有提到"-s".