我正在尝试使用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") ;
}
终端代码:
g++ hello.cc -Wall -std=c++0x -s
/* or an alternative: */
g++ hello.cc -Wall -std=c++0x -o test -Wl,-s
编译器警告:
ld: warning: option -s is obsolete and being ignored
有人对这个奇怪的警告有任何想法吗?
编辑:
奇怪的是,当使用-s标志时, 的大小减少,从9,216字节减少到9,008。
然而,当我使用以下内容时,大小减少到8,896字节。
cp hello hello_stripped
strip hello_stripped
答案 0 :(得分:5)
错误消息来自ld
,而不是来自gcc
或g++
。 (gcc
和g++
命令是调用编译器,链接器和其他工具的驱动程序。)
gcc
将-s
选项传递给链接器,如gcc 4.6.1 manual中所述;显然gcc
的MacOS端口仍然这样做。
GNU链接器(GNU ld
)仍然接受具有其通常含义的-s
选项。但是MacOS链接器(也称为ld
)忽略它,如MacOS ld manual中所述:
-s完全剥离输出,包括删除符号表。 不再支持此文件格式变体。这个选项是 过时。
与{GNU的gcc手册不同,MacOS gcc manual没有提及“-s”。
答案 1 :(得分:2)
显然-s
标志已过时。不过,您可以使用strip
程序。