2011-12-13 4 views
0

я получаю эти ошибки при компиляции gcc -c -O2...:НКУ ошибка stdio.h

In file included from /usr/include/stdio.h:930:0, 
       from /home/martin/foo.c:3: 
/usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘sprintf’: 
/usr/include/x86_64-linux-gnu/bits/stdio2.h:34:3: error: invalid use of ‘__builtin_va_arg_pack()’ 
/usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘snprintf’: 
/usr/include/x86_64-linux-gnu/bits/stdio2.h:65:3: error: invalid use of ‘__builtin_va_arg_pack()’ 

Это происходит только тогда, когда -O2 включен, GCC 4.6.1. Что может быть неправильным? Я проверил все защитники заголовков, и они выглядят нормально.

+1

Какое качество вы пользуетесь? Какова ваша программа 'foo.c'? Является ли «gcc» той, которая упакована в ваш дистрибутив? –

+0

Можете ли вы показать всю командную строку, так как есть хороший шанс, что есть -D или подобное отсутствует. –

+1

Это происходит, если исходный файл, который вы компилируете, состоит из _just_ ''#include ' '? Если нет, что вам нужно добавить, чтобы это произошло? – zwol

ответ

-1

Есть ли веская причина для использования -O2? Будет ли -O [или -O1] сделать вместо -O2. Если вам действительно нужно использовать -O2 и хотите сузить «флаг виновника», одно предложение - использовать -O1, а затем включить gcc флаги один за другим, который используется для -O2. Ниже приведен список флагов, используемых -O2.

 -fthread-jumps 
     -falign-functions 
     -falign-jumps 
     -falign-loops 
     -falign-labels 
     ... // there is a big list 

Вы можете найти эти флаги в gcc manual on optimization's. В руководстве должно быть подробное объяснение каждого флага и его цели.

+0

* Отсутствие * уровней '-O' gcc эквивалентно любой комбинации переключателей' -f' (точнее, все они делают * больше *, чем просто набор пучков '-f'). – zwol

Смежные вопросы