Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема при компиляции .c файла с помощью g++
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
imiron13
Создал С++-проект в Xilinx SDK 13.2. Проект состоит из .c и .cpp файлов. Мейкфайл генерируется автоматически. Все файлы компилируются mb-g++. Насколько я понимаю это нормально, g++ должен уметь компилировать как .c, так и .cpp, а выбор C/C++ компилятора должен производиться по расширению. Однако при компиляции .c файла вызывается c++ компилятор: работает синтаксис с++, срабатывает вставка:
Код
#ifdef __cplusplus
#error "compiled by с++ compiler"
#endif

Индексатор же, наоборот, интерпретирует файл как Си-код. Править весь С-код в С++ немного трудоемко. Может необходимо указать дополнительные опции g++, чтобы он определял тип файла по расширению? Подскажите пожалуйста, если есть идеи или уже решали эту проблему.
DmitryM
Цитата(imiron13 @ Feb 27 2013, 18:49) *
а выбор C/C++ компилятора должен производиться по расширению.

стандартный способ:
#ifdef __cplusplus
extern "C" {
#endif
....
#ifdef __cplusplus
}
#endif
imiron13
Цитата(DmitryM @ Feb 27 2013, 21:20) *
стандартный способ:
#ifdef __cplusplus
extern "C" {
#endif
....
#ifdef __cplusplus
}
#endif

Эти вставки обычно делаются в .h файле сишного модуля для возможности использовать этот хидер при компиляции .cpp. Я их использую, но дело не в этом. Речь о том, что компиляция .c файла производится c++ компилятором, а нужно откомпилировать си-компилятором.

Проверил с mingw и codesourcery, там .c файлы также компилируются как c++ код, если передавать их g++ (но при генерации мэйкфайлов эклипсом для .c файлов используется gcc, а не g++ как в моем случае и все собирается без проблем). Т.е. я видимо был неправ здесь:
Цитата
Насколько я понимаю это нормально, g++ должен уметь компилировать как .c, так и .cpp, а выбор C/C++ компилятора должен производиться по расширению.
Значит для компиляции си-файла необходимо использовать именно gcc? Тогда получается Xilinx SDK неправильно формирует мэйкфайлы, используя g++ для .c -файлов. Возможно что-то неправильно с настройками...
alx2
Цитата(imiron13 @ Feb 27 2013, 20:49) *
Насколько я понимаю это нормально, g++ должен уметь компилировать как .c, так и .cpp, а выбор C/C++ компилятора должен производиться по расширению.

Кто Вам это сказал??? Вы неправильно понимаете. В документации написано:
Цитата
However, the use of gcc does not add the C++ library. g++ is a program that calls GCC and treats `.c', `.h' and `.i' files as C++ source files instead of C source files unless -x is used...
imiron13
Цитата(alx2 @ Feb 28 2013, 07:26) *
Кто Вам это сказал??? Вы неправильно понимаете. В документации написано:
However, the use of gcc does not add the C++ library. g++ is a program that calls GCC and treats `.c', `.h' and `.i' files as C++ source files instead of C source files unless -x is used...

Ок, спасибо, понял. Я где-то читал что gcc это и си и си++ компилятор, а выбор делается по расширению и наверное уже сам досочинял про g++. Непонятно тогда почему мэйкфайлы формируются таким образом, что для .c файлов вызывается g++.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.