Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: chu от Декабрь 13, 2012, 09:33



Название: Проблемы со сборкой приложения
Отправлено: chu от Декабрь 13, 2012, 09:33
есть 4 файла: aaa.h, aaa.c, bbb.h, bbb.cpp.
Добавляю
Код:
#include "bbb.h"
в aaa.h (или в aaa.c не важно) и использую функции из bbb в aaa, но при компиляции в файле aaa.c выскакивают ошибки
Цитировать
undefined reference to `functionFromBBB'
.
Как с этим бороться?


Название: Re: Проблемы со сборкой приложения
Отправлено: Bepec от Декабрь 13, 2012, 09:48
Использовать только static функции с явным указанием namespace, или же создавать объект класса bbb и вызывать функцию у него.
Соответственно приватные и защищённые функции вам недоступны.


Название: Re: Проблемы со сборкой приложения
Отправлено: Kurles от Декабрь 13, 2012, 09:51
А как ты компиллишь эти файлы? У тебя объектный файл b.o (пример для mingw) создается и линкуется с a.c?


Название: Re: Проблемы со сборкой приложения
Отправлено: chu от Декабрь 13, 2012, 09:58
А как ты компиллишь эти файлы? У тебя объектный файл b.o (пример для mingw) создается и линкуется с a.c?
Компилирую в QtCreator. Объектные файлы создаются. Как узнать что они линкуются?


Название: Re: Проблемы со сборкой приложения
Отправлено: Igors от Декабрь 13, 2012, 10:12
Часто так случается когда одни файлы ".cpp" а другие ".с", то есть для них используется С компилятор, и имена не mangled. Можно просто использовать ++ компилятор для всех. Или так

Код
C++ (Qt)
// aa.h
#ifdef _cplusplus
extern "C" {
#endif
 
void MyFunc( void );  // тело в файле aa.c
 
#ifdef _cplusplus
}
#endif
 



Название: Re: Проблемы со сборкой приложения
Отправлено: chu от Декабрь 13, 2012, 11:21
Спасибо всем! Файл ааа.с переименовал в ааа.срр - проблема решилась:)