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

 
 
> Как сделать смешанный проект с/с++?
juvf
сообщение Apr 8 2010, 03:24
Сообщение #1


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



есть проект на си для IAR MSP430. создал новый файл. скомпелял - всё работает. указал опцию новому файлу с++. перестало собиратся. Вообщем не возможно из сишных файлов вызвать функции написанные в с++ файлах. для теста написал маленький проект

main.c
Код
#include "io430.h"
#include "test.h"

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
  int b;
  b = myCppF(56);

  return b;
}


test.h
Код
int myCppF(int f);


test.cpp
Код
#include "test.h"

int myCppF(int f)
{
    return ~f;
}


опции всего проекта и main.c - си, test.cpp - си++.

при компиляции ошибка линкера
Код
Error[e46]: Undefined external "myCppF" referred in main ( D:\Work\testcpp\Debug\Obj\main.r43 )
Error while running Linker


Как вызвать из сишного файла функцию, определённую в с++?

ps в прикреплении архив с этим тестовым проектом.
Прикрепленные файлы
Прикрепленный файл  testcpp.rar ( 8.91 килобайт ) Кол-во скачиваний: 11
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Apr 8 2010, 11:09
Сообщение #2


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата
Так, к слову...
Что-то у Вас не то в консерватории. ИМХО, такой ситуации быть не должно.
Обычно CPP проект - это надстройка над "СИ-драйверами" и вызовы происходят только в одностороннем порядке CPP модули вызывают СИ функции, а не наоборот.
ЭЭЭЭ ,,,,,, но у мена не с++ проект ,,,,,,,,,,,, и не совсем понятно почему двунаправленные вызов - это не есть гуд?. У меня СИ проект и я пишу новый файл на с++. естественно что вызов с++ функций будет происходить из си кода, ну и естественно некоторые модули, которые используются в этом новом с++ уже написаны на си. Т.е. вызовы двусторонние.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 8 2010, 12:02
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



На мой взгляд механизм extern C даёт возможность получить нормальные имена функций (а не __zvls14_qwew_dadada)
и прочие нюансы связанные со способом передачи аргументов для того чтобы получить совместимость с СИ, а обратного механизма нет в природе (ибо СИ и так является подмножеством CPP).
Поищите в google информацию о смешанных проектах. И я уверен, что первой рекомендацией будет поместить main() в CPP модуль, о чём я и толкую.
Вы можете принять эту информацию к сведению, или продолжать идти своим альтернативным путём, быть может тоже ведущим к успеху.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



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

 


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


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