2010-02-23 6 views
2

Вот простой C файл:Как скомпилировать с --pedantic-errors на OS X?

#include <stdio.h> 
#include <stdlib.h> 

int 
main() { 
    printf("hi there!\n"); 
    return 0; 
} 

Компиляция с gcc -ansi -pedantic -pedantic-errors дает это:

In file included from /usr/include/i386/_structs.h:38, 
      from /usr/include/machine/_structs.h:31, 
      from /usr/include/sys/_structs.h:57, 
      from /usr/include/sys/signal.h:154, 
      from /usr/include/sys/wait.h:116, 
      from /usr/include/stdlib.h:65, 
      from test.c:2: 
/usr/include/mach/i386/_structs.h:91: error: type of bit-field ‘__invalid’ is a GCC extension 

С много больше ошибок, о расширениях GCC. Я знаю, что я мог бы просто удалить переключатель -pedantic-errors и перекомпилировать, но по одной причине и другой, то есть не в карточках. Есть ли способ преодолеть эту ошибку; возможно загрузка & установка другой библиотеки C? Я работаю локально на коде, который должен компилироваться на удаленном компьютере, поэтому я не могу настроить Makefile, чтобы указать на специальное место библиотеки, к сожалению.

+0

Сообщите об ошибке Apple! – kennytm

ответ

1

Возможно, вы можете изменить /usr/include/mach/i386/_structs.h:91, чтобы использовать ключевое слово __extension__. Хотя вам придется задаться вопросом, почему это еще не так.

Другое file level Решение должно добавить директиву #pragma GCC system_header в начало _structs.h.

Чтобы исправить его на уровне сборки, добавьте -isystem /usr/include/mach/i386/ в параметры компилятора. Все заголовки в этой папке будут включены, как если бы они были заголовками системы (это должно быть так, но, по-видимому, нет).

+0

Я действительно удивляюсь, я знаю. Это не похоже на stdlib.h - это какой-то странный файл заголовка mach-only, для крика вслух. Я уверен, что ваше решение будет работать, но это, безусловно, последнее решение. – decitrig

+0

ОК, я добавил несколько дополнительных решений, один из которых применяется к сборке, а не к файлу. – Clifford

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