Gcc4: различия между версиями

Материал из ALT Linux Wiki
(Import from freesource.info)
 
Нет описания правки
Строка 1: Строка 1:
[[Category:Devel]]
{{DISPLAYTITLE:gcc4}}
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/gcc4}}
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/gcc4}}


Строка 6: Строка 6:


=== [http://lists.altlinux.org/pipermail/devel/2006-May/032629.html missing sentinel in function call] ===
=== [http://lists.altlinux.org/pipermail/devel/2006-May/032629.html missing sentinel in function call] ===
<pre>>      execl("/bin/sh", "sh", "-c", cmd, 0);
<pre>
>      execl("/bin/sh", "sh", "-c", cmd, 0);
>      Panic(errno, "/bin/sh");
>      Panic(errno, "/bin/sh");
> cc1: warnings being treated as errors
> cc1: warnings being treated as errors
Строка 36: Строка 37:
* [http://womble.decadentplace.org.uk/c++/syntax-errors.html типичные ошибки C++, применительно к gcc4.1]
* [http://womble.decadentplace.org.uk/c++/syntax-errors.html типичные ошибки C++, применительно к gcc4.1]
* [[UpStream|Не забудьте отправить исправление авторам!]]
* [[UpStream|Не забудьте отправить исправление авторам!]]
[[Категория:Devel]]

Версия от 12:48, 4 декабря 2008

Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Особенности gcc4

Точнее, gcc4.1 из Sisyphus (уже с включенными по умолчанию -D_FORTIFY_SOURCE=2 -fstack-protector).

missing sentinel in function call

>       execl("/bin/sh", "sh", "-c", cmd, 0);
>       Panic(errno, "/bin/sh");
> cc1: warnings being treated as errors
> fileio.c: In function 'printpipe':
> fileio.c:782: warning: missing sentinel in function call
> 
> Как исправить?
Читать документацию.  Если лень искать, то вторая ссылка в G ведёт на http://www.linuxonly.nl/docs/sentinel/

Так ругается: execl("/bin/sh", "sh", "-c", cmd, 0);

Так не ругается: execl("/bin/sh", "sh", "-c", cmd, NULL);

stack_chk_fail

Вообще говоря, обычно проблемы из-за того, что авторы линкуются напрямую ld, без gcc; в таком случае достаточно исправить линковку на gcc, а передаваемые линкеру опции предварить -Wl, (например, -Wl,--as-needed).

Если программа специфична (realmode или ещё что подобное) или пакет ценен, но возможности исправить сборку в дополнительно защищённый бинарник не получается -- можно отключить stack protector:

%add_optflags -U_FORTIFY_SOURCE -fno-stack-protector

invalid lvalue in assignment

Убери lvalue_cast
- (int)(long)pnew = -1;
+pnew = (void*)-1;

В случае с rpm помогло.
gcc3.4 на эти же строчки выдает warnings, а в gcc4.1 - они уже errors.

(Damir Shayhutdinov)

ссылки