LINUX.ORG.RU

Что за проблема c подключением вложенных библиотек?

 ,


0

2

Создаю в Qt Creator, но думаю, что проблема не в нём...

Создаю статическую библиотеку lib1 в Qt без использования QtCore. Проект получается, по-умолчанию, содержащий файлы lib1.cpp и lib1.h, в которых описан пустой класс Lib1 (только пустой конструктор).

Создаю тестовое приложение «Проект без Qt», которое так и называется test, подключаю к нему эту либу - всё работает.

Теперь создаю также как и lib1 статическую библиотеку lib2.

lib2.cpp:

#include «lib1.h» #include «lib2.h»

Lib2::Lib2() { Lib1 *lib1 = new Lib1(); }

Компилирую библиотеку Lib2 - пока всё работает как надо.

Вставляю в своё приложение строчку:

Lib2 *lib2 = new Lib2();

И тут появляется странная ошибка:

Undefined reference to Lib1::Lib1() в файле lib2.cpp

Что за странная ошибка? Что я делаю не так?

Наверно, надо прописать при линковке lib1, опция gcc -l1.

aureliano15 ★★
()

Линкуете с обоими библиотеками?

параметры линковки покажите.

samson ★★
()
Ответ на: комментарий от fluorite

Файл test.pro:

TEMPLATE = app CONFIG += console c++11 CONFIG -= app_bundle CONFIG -= qt

SOURCES += main.cpp

unix:!macx: LIBS += -L$$PWD/../lib1/ -llib1

INCLUDEPATH += $$PWD/../lib1 DEPENDPATH += $$PWD/../lib1

unix:!macx: PRE_TARGETDEPS += $$PWD/../lib1/liblib1.a

unix:!macx: LIBS += -L$$PWD/../lib2/ -llib2

INCLUDEPATH += $$PWD/../lib2 DEPENDPATH += $$PWD/../lib2

unix:!macx: PRE_TARGETDEPS += $$PWD/../lib2/liblib2.a

sitev_ru
() автор топика

Важен порядок линковки. Не знаю как там это работает в qmake, но попробуй упоминания либ поменять местами.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Если lib2 использует функции из lib1, то в списке линковки lib1 должна идти после lib2.

Сделай так

unix:!macx: LIBS += -L$$PWD/../lib2/ -llib2 -L$$PWD/../lib1/ -llib1

alexku
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.