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

 
 
> Совместное использование *.сpp файлов и *.c, Не компилируются совместно файлы Си и Си++
kolobochishe
сообщение Jun 9 2011, 07:22
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Вот такая ошибка при вызове функции написанной в *.cpp файле из *.с файла

Linking
Error[Li005]: no definition for "plot_spectrum" [referenced from C:\ÐÀÁÎÒÀ\ÐÀÇÐÀÁÎÒÊÈ\ÏÐÎÅÊÒÛ\ÄÐÀÊÎÍ\Ðåãèñòðàòîðû\Ïðîøèâêà\
LPC3250 GUI_RTOS\arm\PowerPac\BoardSupport\NXP\LPC3250\Output\LPC3250\Debug_SDRAM\Obj\DRAGON_BS1_GUI.o]
Error while running Linker

Функция объявлена в соответствующем *.h файле. Он подключен везде, где требуется.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sonycman
сообщение Jun 18 2011, 09:38
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



А наоборот может быть - ошибка при вызове из си++ файла функции, объявленной в простом си исходнике?

Ошибка такая же - Li005 - линкер не может найти определение функции... sad.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 18 2011, 13:51
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(sonycman @ Jun 18 2011, 12:38) *
А наоборот может быть - ошибка при вызове из си++ файла функции, объявленной в простом си исходнике?

Ошибка такая же - Li005 - линкер не может найти определение функции... sad.gif


Вы хоть эту ветку читаете? Про extern "C"?
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 19 2011, 17:36
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(sergeeff @ Jun 18 2011, 17:51) *
Вы хоть эту ветку читаете? Про extern "C"?

А вы хоть читаете, о чём я спрашиваю?
Одно дело, когда обычный си модуль не может найти си++ функцию, имя которой, по понятным причинам, видоизменено.
Но когда наоборот - си++ модуль в упор не видит обычную си функцию?

В этом случае ведь name mangling не работает?

Ошибка уходит, когда принудительно включаю компиляцию си файлов в режиме си++.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 19 2011, 18:04
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(sonycman @ Jun 19 2011, 23:36) *
Но когда наоборот - си++ модуль в упор не видит обычную си функцию?

Именно для этого случая и нужно в заголовочных файлах от си функций писать extern "C". Иначе C++ ожидает функции с замангленными именами.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 19 2011, 19:14
Сообщение #6


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(AHTOXA @ Jun 19 2011, 22:04) *
Именно для этого случая и нужно в заголовочных файлах от си функций писать extern "C". Иначе C++ ожидает функции с замангленными именами.

Понятно. Значит, всегда, когда плюсы имееют дело с ассемблерными или обычными сишными модулями (или наоборот) необходимо юзать этот костыль.
Спасибо beer.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 19 2011, 20:30
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(sonycman @ Jun 19 2011, 22:14) *
Понятно. Значит, всегда, когда плюсы имееют дело с ассемблерными или обычными сишными модулями (или наоборот) необходимо юзать этот костыль.
Спасибо beer.gif


А это вовсе не костыль, а возможность из С++ использовать С/ASM модули. Вам эта возможность не нравится?

Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 19 2011, 21:17
Сообщение #8


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(sergeeff @ Jun 20 2011, 00:30) *
А это вовсе не костыль, а возможность из С++ использовать С/ASM модули. Вам эта возможность не нравится?

Я об этом знал, но считал, что это работает только в сторону от си++ к си.
Не думал, что плюсы будут манглить даже обычную сишную функцию, подключенную через хидер laughing.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 20 2011, 08:42
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(sonycman @ Jun 20 2011, 01:17) *
Не думал, что плюсы будут манглить даже обычную сишную функцию, подключенную через хидер laughing.gif
А откуда С++ знать, что это 'обычная С функция'? Для этого extern "C" и предназначен rolleyes.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 20 2011, 09:13
Сообщение #10


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(dxp @ Jun 20 2011, 06:59) *
Если компиляете в С++ режиме, то все функции будут кодироваться по-плюсатому. Ведь в плюсах обычное дело та же перегрузка имён функций, и как компилятор должен догадаться, какие функции у вас имеют С-связывание, а какие С++ связывание. Для этого и введена спецификация связывания extern "<Lang>", где <Lang> - отличный от С++ язык (там не обязательно должен быть С, хотя этот вариант встречается в подавляющем большинстве случаев).

Спасибо.
Интересно, а какие ещё есть идентификаторы <Lang>?

Цитата(XVR @ Jun 20 2011, 12:42) *
А откуда С++ знать, что это 'обычная С функция'? Для этого extern "C" и предназначен rolleyes.gif

Так тело-то этой функции - в обычном .c файле!
Компилер что, манглит сразу имя функции по её объявлению в хидере, не заглядывая даже в определение?
Вот шустрый какой! biggrin.gif
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 20 2011, 12:04
Сообщение #11


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(sonycman @ Jun 20 2011, 16:13) *
Интересно, а какие ещё есть идентификаторы <Lang>?

Мне попадалось FORTRAN.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 20 2011, 12:15
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (dxp @ Jun 20 2011, 14:04) *
Мне попадалось FORTRAN.

И PASCAL



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
inventor
сообщение Jun 22 2011, 10:52
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Кстати, никогда не делайте программы для DSP и контроллеров на С++
выгоды которые вы получите весят меньше чем недостатки и косяки
которые вы встретите и не сможете устранить.
То есть делайте свои программы исключительно на C
а не С++.
Безо всяких "extern C"/
Все таки язык С++ был разработан совсем для других целей.
Ну там базы данных писать и что-то подобное большое.
В качестве системного языка он не подходит.
По моему скромному мнению.
Хотя находятся герои которые для QNX что-то на С++ ваяют.

Сообщение отредактировал inventor - Jun 22 2011, 10:53
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 22 2011, 12:13
Сообщение #14


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(inventor @ Jun 22 2011, 17:52) *
Кстати, никогда не делайте программы для DSP и контроллеров на С++

sm.gif
Вам сюда.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
inventor
сообщение Jun 22 2011, 13:59
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(dxp @ Jun 22 2011, 16:13) *
sm.gif
Вам сюда.


Для меня достаточно просто посмотреть на код С++ в асме-
что он там плодит, чтобы больше так никогда не делать.
Все это красиво получается в исходниках, но не в работе.
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 22 2011, 19:19
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(inventor @ Jun 22 2011, 17:59) *
Для меня достаточно просто посмотреть на код С++ в асме-
что он там плодит, чтобы больше так никогда не делать.
Угу, видели видели. Начинается с воплей 'какое С/С++ гуано', а заканчивается открытием, что у С/С++ компиляторов оказывается есть разные уровни оптимизации и дебаггерные режимы laughing.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kolobochishe   Совместное использование *.сpp файлов и *.c   Jun 9 2011, 07:22
- - MrYuran   В хедерах си-шных модулей надо вставить скобки Код...   Jun 9 2011, 07:43
|- - sergeeff   Проще прямо написать Код#ifdef __cplusplus extern ...   Jun 9 2011, 07:46
- - kolobochishe   Цитата(MrYuran @ Jun 9 2011, 12:43) В хед...   Jun 9 2011, 08:05
|- - mdmitry   Цитата(kolobochishe @ Jun 9 2011, 12:05) ...   Jun 9 2011, 09:47
|- - inventor   Цитата(mdmitry @ Jun 9 2011, 13:47) Можно...   Jun 16 2011, 18:24
|- - sergeeff   Цитата(inventor @ Jun 16 2011, 22:24) в п...   Jun 17 2011, 10:24
|- - zltigo   QUOTE (sergeeff @ Jun 17 2011, 13:24) про...   Jun 17 2011, 12:54
|- - sergeeff   Цитата(zltigo @ Jun 17 2011, 16:54) С и С...   Jun 17 2011, 13:20
|- - zltigo   QUOTE (sergeeff @ Jun 17 2011, 16:20) Хот...   Jun 17 2011, 13:33
|- - Сергей Борщ   QUOTE (sergeeff @ Jun 17 2011, 16:20) Хот...   Jun 17 2011, 13:40
||- - zltigo   QUOTE (Сергей Борщ @ Jun 17 2011, 16:40) ...   Jun 17 2011, 13:59
||- - dxp   Цитата(Сергей Борщ @ Jun 17 2011, 20:40) ...   Jun 17 2011, 14:09
|- - Danis   Цитата(sergeeff @ Jun 17 2011, 16:20) Хот...   Jun 17 2011, 13:57
|- - dxp   Цитата(sonycman @ Jun 20 2011, 04:17) Я о...   Jun 20 2011, 02:59
|- - XVR   Цитата(sonycman @ Jun 20 2011, 13:13) Так...   Jun 20 2011, 09:21
||- - sonycman   Цитата(XVR @ Jun 20 2011, 13:21) Разумеет...   Jun 20 2011, 09:34
||- - dxp   Цитата(inventor @ Jun 22 2011, 20:59) Для...   Jun 22 2011, 14:48
|||- - zltigo   QUOTE (dxp @ Jun 22 2011, 17:48) Заинтриг...   Jun 22 2011, 17:52
||- - inventor   Цитата(XVR @ Jun 22 2011, 23:19) Угу, вид...   Jun 23 2011, 11:21
||- - MrYuran   Цитата(inventor @ Jun 23 2011, 15:21) код...   Jun 23 2011, 11:30
||- - dxp   Цитата(inventor @ Jun 23 2011, 18:21) код...   Jun 23 2011, 12:35
|||- - inventor   Цитата(dxp @ Jun 23 2011, 16:35) Это тако...   Jun 23 2011, 16:41
||- - XVR   Цитата(inventor @ Jun 23 2011, 15:21) код...   Jun 23 2011, 17:54
||- - ar__systems   Цитата(inventor @ Jun 23 2011, 07:21) код...   Jul 4 2011, 01:14
|- - AHTOXA   Цитата(inventor @ Jun 22 2011, 16:52) Все...   Jun 22 2011, 14:48
- - sergeeff   Уж сколько понаписано про преждевременную оптимиза...   Jun 24 2011, 10:45
|- - zltigo   QUOTE (sergeeff @ Jun 24 2011, 13:45) Уж ...   Jun 24 2011, 13:15
|- - inventor   Цитата(zltigo @ Jun 24 2011, 17:15) глупо...   Jun 24 2011, 15:50
|- - sergeeff   Цитата(zltigo @ Jun 24 2011, 16:15) глупо...   Jun 25 2011, 09:41
|- - zltigo   QUOTE (sergeeff @ Jun 25 2011, 11:41) А ч...   Jun 25 2011, 09:47
|- - sergeeff   Цитата(zltigo @ Jun 25 2011, 12:47) После...   Jun 25 2011, 17:38
|- - zltigo   QUOTE (sergeeff @ Jun 25 2011, 19:38) Ров...   Jun 25 2011, 18:53
|- - sergeeff   Цитата(zltigo @ Jun 25 2011, 21:53) Вы оп...   Jun 25 2011, 22:44
||- - Dog Pawlowa   Цитата(sergeeff @ Jun 26 2011, 01:44) Про...   Jun 26 2011, 05:03
||- - inventor   Цитата(sergeeff)Сделали. И вдруг (или не вдруг) на...   Jun 26 2011, 06:35
||- - zltigo   QUOTE (sergeeff @ Jun 26 2011, 00:44) Име...   Jun 26 2011, 08:26
||- - sergeeff   Цитата(zltigo @ Jun 26 2011, 11:26) Забыл...   Jun 26 2011, 09:37
||- - zltigo   QUOTE (sergeeff @ Jun 26 2011, 12:37) Одн...   Jun 26 2011, 10:18
||- - sergeeff   Цитата(zltigo @ Jun 26 2011, 13:18) Катег...   Jun 26 2011, 10:39
|- - MrYuran   Цитата(zltigo @ Jun 25 2011, 22:53) Все у...   Jun 27 2011, 06:43
- - dxp   Цитата(inventor @ Jun 24 2011, 22:50) Не ...   Jun 27 2011, 06:57
- - MrYuran   Цитата(dxp @ Jun 27 2011, 10:57) Даже есл...   Jun 27 2011, 07:02
|- - dxp   Цитата(MrYuran @ Jun 27 2011, 14:02) Согл...   Jun 27 2011, 10:44
- - zltigo   QUOTE (dxp @ Jun 27 2011, 08:57) Насчёт А...   Jun 27 2011, 08:20


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 19:52
Рейтинг@Mail.ru


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