Gcc4: различия между версиями
(Import from freesource.info) |
Ilis (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
{{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
Особенности 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)