реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
imiron13
сообщение Feb 27 2013, 15:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 22-02-09
Из: Минск
Пользователь №: 45 206



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

Индексатор же, наоборот, интерпретирует файл как Си-код. Править весь С-код в С++ немного трудоемко. Может необходимо указать дополнительные опции g++, чтобы он определял тип файла по расширению? Подскажите пожалуйста, если есть идеи или уже решали эту проблему.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Feb 27 2013, 18:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(imiron13 @ Feb 27 2013, 18:49) *
а выбор C/C++ компилятора должен производиться по расширению.

стандартный способ:
#ifdef __cplusplus
extern "C" {
#endif
....
#ifdef __cplusplus
}
#endif
Go to the top of the page
 
+Quote Post
imiron13
сообщение Feb 27 2013, 19:59
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 22-02-09
Из: Минск
Пользователь №: 45 206



Цитата(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 -файлов. Возможно что-то неправильно с настройками...
Go to the top of the page
 
+Quote Post
alx2
сообщение Feb 28 2013, 04:26
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(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...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
imiron13
сообщение Feb 28 2013, 08:26
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 22-02-09
Из: Минск
Пользователь №: 45 206



Цитата(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++.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 07:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016