Название: multiple definition при сборке модифицированной библиотеки Отправлено: Digan от Июнь 03, 2011, 16:46 Всем добрый день.
В общем понадобилось модифицировать одну библиотеку на си: добавить пару функций и пару переменных. И все это дело присоединить к Qt-приложению. Немодифицированная библиотека собирается без проблем. Модифицированная же при сборке выдает ошибку multiple definition of `имя моей новой переменной'. Мои переменные и функции объявлены в си файлах следующим образом. Код
Как это можно исправить? Название: Re: multiple definition при сборке модифицированной библиотеки Отправлено: GreatSnake от Июнь 03, 2011, 17:06 во включаемом файле пропиши видимость символов:
Код
Название: Re: multiple definition при сборке модифицированной библиотеки Отправлено: Digan от Июнь 03, 2011, 19:05 Если так объявить, то я не могу использовать эту переменную в моей функции.
К примеру в prntutil.h объявленно: Код
Тогда в prntutil.c пишу реализацию getCF(): Код
При сборке получаю ошибки: Цитировать ...\debug\prntutil.o:-1: In function `getCF': ...\prntutil.c:80: ошибка: undefined reference to `cfactor' ...\prntutil.c:81: ошибка: undefined reference to `cfactor' Название: Re: multiple definition при сборке модифицированной библиотеки Отправлено: GreatSnake от Июнь 03, 2011, 21:39 Мде, азы однако...
А кто память под cfactor выделять будет ??? В prntutil.c заведи: Код
Название: Re: multiple definition при сборке модифицированной библиотеки Отправлено: Digan от Июнь 03, 2011, 22:23 Память выделять для cfactor не нужно в этом случае.
Т.к. указателю cfactor присваивается значение другого указателя, который находиться внутри одной из функций. То есть все это я делаю, чтобы "вытащить" из функции библиотеки некоторое значение, которое стандартными средствами библиотеки никак не получить. Название: Re: multiple definition при сборке модифицированной библиотеки Отправлено: LisandreL от Июнь 03, 2011, 22:59 Память выделять для cfactor не нужно в этом случае. Имеется в виду, что объявить переменную вы должны в c (cpp) файле char *cfactor;, а в заголовочнике (h-файл) не создаёте переменную, а лишь делаете её видимой извне extern char *cfactor;, т.е. нужна и та и та строчка кода, каждая в своём файле. |