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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: динамическая библиотека  (Прочитано 3490 раз)
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
Записан
kambala
Джедай : наставник для всех
*******
Online Online

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Июнь 22, 2011, 18:46 »

может компилятор ищет библиотеку "prlib", а не "prlib1"? 1 - это типа версия библиотеки?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



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

может компилятор ищет библиотеку "prlib", а не "prlib1"? 1 - это типа версия библиотеки?
Так и есть. Нужно вместо
Код
C++ (Qt)
LIBS+= -L../lib -lprlib
 
писать
Код
C++ (Qt)
LIBS+= -L../lib -lprlib1
 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
iks
Гость
« Ответ #3 : Июнь 22, 2011, 22:54 »

или вот тут отвечал http://www.prog.org.ru/index.php?topic=18321.msg124868#new и пример есть
Записан
AlexeyChe
Гость
« Ответ #4 : Июнь 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, хотелось бы с этим разобраться нормально
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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