2013-09-26 2 views
4

Всякий раз, когда я пытаюсь скомпилировать код C++ с g ++ на терминале, я не могу заставить g ++ выводить любые сообщения об ошибках, хотя я уверен, что есть ошибки, которые должны быть обнаружены во время время компиляции (например, синтаксис, ссылочные типы ...).g ++ не выдает никаких ошибок

Я попробовал несколько способов, таких, как этот макияж файла:

all: 
    g++ -W -Wall -Werror main.cpp 

Все это делает выход:

make: *** [all] Error 1 

, который не является полезным, очевидно, ...

Typing такие как:

g++ -W -Wall -Werror main.cpp 

непосредственно на терминал (без файла make) не выводит никаких сообщений вообще.

Однако это успешно выводит все ошибки во время компиляции:

cc main.cpp 

Мой вопрос: как я могу сделать г ++ для вывода сообщений об ошибках, так что я могу знать, где исправить мой код?

+1

Если GCC не выводит никаких ошибок, то ошибок нет? Вы проверили, что создан новый файл 'a.out'? И это 'cc' показывает ошибки, потому что вы используете компилятор C для компиляции кода на C++. –

+0

Я уверен, что есть ошибки. Я даже намеренно добавляю ошибки в свой код, и он по-прежнему не вызывает никаких ошибок. И он не выводит a.out И хорошо, что cc действительно хорошо ломает ошибки для моего кода на C++ – StarShire

+0

g ++: 'i686-apple-darwin11-llvm-g ++ - 4.2 (GCC) 4.2.1 (на основе Apple Inc . build 5658) (LLVM build 2336.11.00) ' cc: ' Apple LLVM version 4.2 (clang-425.0.28) (на основе LLVM 3.2svn) Цель: x86_64-apple-darwin12.5.0' – StarShire

ответ

0

Попробуйте что-нибудь простое, как это:

g++ -c main.cpp 
+0

Это тоже ничего не выводит. Похоже, что он игнорирует команду ... – StarShire

+0

Не могли бы вы разместить свой main.cpp? – cpp

+0

Кроме того, 'g ++ --version'? –

0

Make сообщает об ошибке, когда одна из его задач возвращает не-0 статус. Если g ++ молча возвращает не-0 - ну, я предполагаю, что он как-то сломался. Проверить $? после запуска g ++. Кроме того, попробуйте g ++ --version - он вообще ничего не сообщит? Также вы можете запустить его под отладчиком, чтобы быть уверенным.

+0

У меня такое чувство, что это проблема. И не могли бы вы объяснить, когда скажете «check $?»? выходы 'g ++ --version':' i686-apple-darwin11-llvm-g ++ - 4.2 (GCC) 4.2.1 (основано на Apple Inc. build 5658) (LLVM build 2336.11.00) ' Xcode, похоже, работает хорошо. – StarShire

+0

'g ++ main.cpp; echo $? '; Кроме того, проверьте, на что указывает ваш 'cc', если вы говорите, что он работает нормально. Попробуйте 'gcc main.cpp' - он может указывать на другую программу в вашей установке. Вы также можете проверить --version для cc и gcc - мне не нравится «llvm» в вашей строке версии, но я тоже не знаю OSX, так что это может быть просто отлично. – keltar

+0

'g ++ main.cpp; echo $? 'выводит' 1'. Как проверить, на что указывает 'cc'? 'gcc main.cpp' ничего не выводит и дает мне' 1', когда я делаю 'echo $?'. 'версия cc':' Яблоко LLVM версии 4.2 (лязг-425.0.28) (на основе LLVM 3.2svn) Target: x86_64-яблочно-darwin12.5.0 модель Автор: posix' – StarShire

0

Попробуйте добавить строку как

#warning hello from here 

(или, возможно, #error вместо #warning) в main.cc ближе к началу (возможно, в качестве первой линии).

Если

gcc -Wall -v main.cc 

не дает никакого вывода (в частности предупреждения или ошибки), что означает, что ваш gcc сломан. Возможно, тип /usr/bin/gcc вместо gcc

BTW, Apple не нравится GCC (потому что им не нравится его лицензия GPLv3 +). Возможно, стоит потратить ваше время на создание [используя, например, ..../configure --program-suffix=-local] и установите новый GCC (возможно, из tar-тангажа компилятора). Текущая версия - 4.8.1!

2

Просто угадывание - возможно ли ваш терминал не печатать stderr? Скажем, например, он перемещает его в файл журнала или что-то еще?

Попробуйте запустить

g++ [whatever your arguments are] |& cat 

(это если вы используете Tcsh) или

g++ [whatever] 2>&1 | cat 

, если вы используете Баш.

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