Russian Qt Forum
Ноябрь 02, 2024, 09:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: multiple definition при сборке модифицированной библиотеки  (Прочитано 3339 раз)
Digan
Гость
« : Июнь 03, 2011, 16:46 »

Всем добрый день.

В общем понадобилось модифицировать одну библиотеку на си: добавить пару функций и пару переменных. И все это дело присоединить к Qt-приложению.
Немодифицированная библиотека собирается без проблем.
Модифицированная же при сборке выдает ошибку multiple definition of `имя моей новой переменной'.
Мои переменные и функции объявлены в си файлах следующим образом.
Код
C
  char *cfactor;
  char *getCF();
 
  char *resultString;
  char *getResultString();
 

Как это можно исправить?
« Последнее редактирование: Июнь 03, 2011, 18:13 от Digan » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июнь 03, 2011, 17:06 »

во включаемом файле пропиши видимость символов:
Код
C
extern char *cfactor;
extern char *resultString;
 
Записан

Qt 5.11/4.8.7 (X11/Win)
Digan
Гость
« Ответ #2 : Июнь 03, 2011, 19:05 »

Если так объявить, то я не могу использовать эту переменную в моей функции.

К примеру в prntutil.h объявленно:
Код
C
  extern char *cfactor;
  char *getCF();
 

Тогда в prntutil.c пишу реализацию getCF():
Код
C
globle char *getCF()
{
   if(cfactor != NULL)
       return cfactor;
   else
       return "CF not have value\n";
}
 

При сборке получаю ошибки:
Цитировать
...\debug\prntutil.o:-1: In function `getCF':
...\prntutil.c:80: ошибка: undefined reference to `cfactor'
...\prntutil.c:81: ошибка: undefined reference to `cfactor'
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Июнь 03, 2011, 21:39 »

Мде, азы однако...

А кто память под cfactor выделять будет  Непонимающий

В prntutil.c заведи:
Код
C
char *cfactor;
Записан

Qt 5.11/4.8.7 (X11/Win)
Digan
Гость
« Ответ #4 : Июнь 03, 2011, 22:23 »

Память выделять для cfactor не нужно в этом случае.
Т.к. указателю cfactor присваивается значение другого указателя, который находиться внутри одной из функций. То есть все это я делаю, чтобы "вытащить" из функции библиотеки некоторое значение, которое стандартными средствами библиотеки никак не получить.
« Последнее редактирование: Июнь 03, 2011, 22:25 от Digan » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #5 : Июнь 03, 2011, 22:59 »

Память выделять для cfactor не нужно в этом случае.
Имеется в виду, что объявить переменную вы должны в c (cpp) файле char *cfactor;, а в заголовочнике (h-файл) не создаёте переменную, а лишь делаете её видимой извне extern char *cfactor;, т.е. нужна и та и та строчка кода, каждая в своём файле.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.064 секунд. Запросов: 23.