Название: вопрос по линковке Отправлено: Magnolia от Март 21, 2012, 12:47 Всем привет! Стоит такая задача: есть проект на С++ под Qt, к нему нужно прилинковать объектный файл (откомпилированный исходник на С). Работаю в Qt Creator. Подскажите как в Creator'e либо в консоли собрать проект вместе с добавленным объектником (или же в проект добавлять сам исходник, а не готовый объектный файл). Нужно MakeFile править или что-то другое?
Название: Re: вопрос по линковке Отправлено: kambala от Март 21, 2012, 13:55 если есть исходник, то добавить его в проект можно, если нажать правой кнопкой мыши на папку в дереве файлов - добавить существующий, или просто дописать относительный путь к исходнику в соответствующий раздел файла .pro и сохранить его
Название: Re: вопрос по линковке Отправлено: FricGeger от Март 21, 2012, 14:06 Есть несколько вариантов:
-добавить сам файл в исходники. Для добавить в файл проекта (*.pro) в разделе SOURCES ваш файл. -скомпилировать дополнительные классы/функции в статическую библиотеку. Для этого в файл проекта нужно добавить путь до исходников(раздел INCLUDEPATH), чтобы проект мог найти требуемые header. Еще потребуется указать путь до статической библиотеки(LIBS), в которой находится реализации требуемых функций. Я бы воспользовался вторым вариантом, хотя все зависит от конкретной задачи. Make file создаст qmake по вашему pro файлу. make file править не надо. Название: Re: вопрос по линковке Отправлено: Magnolia от Март 21, 2012, 14:08 я так и делала, но при сборке проекта посыпались ошибки:
qtcpportlist.o: In function `QTcpPortList::timerEvent(QTimerEvent*)': /home/Multiplexor_v2.5/qtcpportlist.cpp:60: undefined reference to `wdog_proc()' collect2: выполнение ld завершилось с кодом возврата 1 make: Выход из каталога `/home/Multiplexor_v2.5' make: *** [multiplexorConsole] Ошибка 1 Процесс «/usr/bin/make» завершился с кодом 2. Возникла ошибка при сборке проекта multiplexorConsole (цель: Desktop) Во время выполнения сборки на этапе «Сборка» Процедура wdog_proc() находится как раз в исходнике, который я добавляю к проекту. В qtcpportlist.cpp я объявила ее как Код: extern void wdog_proc(); Код: wdog_proc(); Название: Re: вопрос по линковке Отправлено: Magnolia от Март 21, 2012, 14:10 Воспользовалась первым методом - просто добавила файл в исходники.
Название: Re: вопрос по линковке Отправлено: FricGeger от Март 21, 2012, 14:27 Я надеюсь что вы добавили исходный файл, а не объектный.
Название: Re: вопрос по линковке Отправлено: Magnolia от Март 21, 2012, 15:02 Да, исходный. Но сборка завершается с ошибками, о которых писала выше.
Название: Re: вопрос по линковке Отправлено: FricGeger от Март 21, 2012, 15:04 Приложите исходные файлы, того где используете функцию и того где она описана
Название: Re: вопрос по линковке Отправлено: Magnolia от Март 21, 2012, 15:20 qtcpportlist.cpp (там где вызывается функция):
Код: #include "qtcpportlist.h" wdproc.c (там где функция описана) Код: #include <unistd.h> Название: Re: вопрос по линковке Отправлено: kambala от Март 21, 2012, 15:30 не уверен, но возможно объявление функции в qtcpportlist.cpp надо заключить в
Код
Название: Re: вопрос по линковке Отправлено: Magnolia от Март 21, 2012, 15:49 спасибо большое, заработало!
|