Компилятор G ++: опция -s устарела и игнорируется C ++ - PullRequest
5 голосов
/ 14 сентября 2011

Я пытаюсь скомпилировать и удалить очень простую программу на C ++ с помощью компилятора g ++ (4.6.0 в Mac OSX). Но при компиляции я получаю предупреждение.


исходный код:

#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

У кого-нибудь есть идеи по поводу этого странного предупреждения?

Edit:

Странно то, что размер уменьшается при использовании флага -s, уменьшается с 9,216 байт до 9,008.

Однако, когда я использую следующее, размер уменьшается до 8 896 байт.

cp hello hello_stripped
strip hello_stripped

Ответы [ 2 ]

5 голосов
/ 15 сентября 2011

Сообщение об ошибке от ld, а не от gcc или g++.(Команды gcc и g++ являются драйверами, вызывающими компилятор, компоновщик и другие инструменты.)

gcc передает компоновщику параметр -s, как описано в gcc 4.6.1, руководство ;очевидно, порт MacOS gcc все еще делает это.

Компоновщик GNU (GNU ld) по-прежнему принимает опцию -s с ее обычным значением.Но компоновщик MacOS (также называемый ld) игнорирует его, как описано в руководстве MacOS ld :

-s. Полностью вырезать вывод, включая удаление таблицы символов.Этот вариант формата файла больше не поддерживается.Эта опция устарела.

И в руководстве MacOS gcc , в отличие от руководства GNU по gcc, не упоминается "-s".

2 голосов
/ 14 сентября 2011

Очевидно, флаг -s устарел.Вместо этого вы можете использовать программу strip.

...