Russian Qt Forum

Qt => Общие вопросы => Тема начата: AlexeyChe от Июнь 22, 2011, 17:06



Название: динамическая библиотека
Отправлено: AlexeyChe от Июнь 22, 2011, 17:06
Добрый день.
Не первый день мучаюсь с сабжем, листал форум, делал по указаниям, но в итоге никак не линкуется библиотека, хотя всё вроде прозрачно.

prlib.pro
Код:
QT -= gui

TEMPLATE = lib
DESTDIR = ../

#in
VERSION = 1.0.0
DEFINES += PrLib_LIB
HEADERS += pr_lib.h
SOURCES += pr_lib.cpp

#out
TARGET = prlib

pr_lib.h
Код:

pr_lib.h

#include <QtCore/qglobal.h>

#if defined(PrLib_LIB)
# define EXPORT Q_DECL_EXPORT
#else
# define EXPORT Q_DECL_IMPORT
#endif

extern "C" {
 EXPORT double deg_to_rad(double d);
}
в pr_lib.cpp реализация, там ничего интересного

Библиотека линкуется, выдает на выходе prlib1.dll и libprlib1.a
После я их добавляю в папку проекта /lib
Заголовочный файл pr_lib.h в папку проекта /include

Сам файл проекта:
pr.pro
Код:
...
INCLUDEPATH +=../include
DEPENDPATH +=../include
LIBS+= -L../lib -lprlib

Сам проект собирается в папке src


Ошибка при сборке отвратительно типичная:
Код:
c:/qtsdk/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lprlib
collect2: ld returned 1 exit status

prlib1.dll пихал куда только можно и нельзя. Видеть не хочет вообще
попробовал вариант прямого указания пути через QMAKE_LFLAGS, не помогло

Windows/Mingw


Название: Re: динамическая библиотека
Отправлено: kambala от Июнь 22, 2011, 18:46
может компилятор ищет библиотеку "prlib", а не "prlib1"? 1 - это типа версия библиотеки?


Название: Re: динамическая библиотека
Отправлено: m_ax от Июнь 22, 2011, 18:49
может компилятор ищет библиотеку "prlib", а не "prlib1"? 1 - это типа версия библиотеки?
Так и есть. Нужно вместо
Код
C++ (Qt)
LIBS+= -L../lib -lprlib
 
писать
Код
C++ (Qt)
LIBS+= -L../lib -lprlib1
 


Название: Re: динамическая библиотека
Отправлено: iks от Июнь 22, 2011, 22:54
или вот тут отвечал http://www.prog.org.ru/index.php?topic=18321.msg124868#new и пример есть


Название: Re: динамическая библиотека
Отправлено: AlexeyChe от Июнь 23, 2011, 10:37
Я перепробовал разные варианты
вообще походу правильно именно -lprlib
потому что компилятор сам выбирает более новую версию библиотеки

http://www.prog.org.ru/topic_8259_0.html
Цитировать
Увидев VERSION, qmake во-первых, принимает необходимые меры, чтобы эта версия прописалась вo внутренних свойствах DLL, а, во-вторых — приписывает ее старший номер к имени создаваемого DLL. Т.е. в нашем примере это будет dlabel1.dll. Соответственно, если мы изменим интерфейс нашей библиотеки до полной несовместимости, для предотвращения использования ее старыми приложениями мы должны будем просто сменить VERSION на 2.0.0. И тогда новые версии будут использовать dlabel2.dll, старые — dlabel1.dll.

...
Код:
...
LIBS += -L../../lib -ldlabel

iks, я пока не хочу пробовать plugin, хотелось бы с этим разобраться нормально