Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt5] Подключение dll


Автор: dix75 17.7.2015, 18:22
Добрый день!

Имеется библиотека которая подключается к проекту 

Код

LIBS += -L$$PWD/../../../../Install/dialogs/ -lAboutDialog


Ну qtCreator сам добавляет. Все работает нормально.

Мне необходимо поместить библиотеку в дирректорию отличную от программы.
Совбственно вопрос как заставить программу видеть эту либу

Автор: bsa 22.7.2015, 22:51
прописать путь в переменной PATH (для Windows), /etc/ld.so.conf (для Linux) или скопировать туда, где все DLL в системе лежат. Или грузить динамически через QLibrary.

Автор: dix75 28.7.2015, 11:40
Спасибо.
 
Кроме QLibrary и я ничего не увидел.

Автор: NoviceF 28.7.2015, 17:13
Для posix совместимых систем должен работать экспорт переменной LD_LIBRARY_PATH со списком директорий, где нужно искать либы.

Грузить динамически это неудобная штука, требующая много лишних телодвижений, на мой взгляд лучше обойти даже используя платформозависимые решения.

Автор: dix75 29.7.2015, 11:45
Цитата(NoviceF @  28.7.2015,  17:13 Найти цитируемый пост)
Грузить динамически это неудобная штука,

да неудобно
Цитата(NoviceF @  28.7.2015,  17:13 Найти цитируемый пост)
на мой взгляд лучше обойти даже используя платформозависимые решения.

Ну не знаю на мой нет.

Интересно получается что, запуская приложение в Qt creator оно видит либу по определенному пути
запуская непосредственно нет

Судя по этой записи (привожу только для win) приложение должно видеть по этому адресу либы (так и есть)
Код

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../Install/dialogs/ -lAboutDialog


Но прописать другой адрес только для запуска непосредственно приложения не получается

Автор: math64 29.7.2015, 13:08
Посмотри в настройках проекта вкладку "Настройка запуска" - значение переменной "PATH" (для Windows).
Эти настройки сохраняются в файле Project.pro.user.
Вне Qt Creator можно запускать из bat-файла, но при этом появляется консольное окно.

Автор: dix75 30.7.2015, 11:35
math64, А причем тут виндовс я под ним не работаю

Автор: math64 31.7.2015, 08:52
Ну, в заголовке темы: dll. А это Windows. В Linux аналогично, но переменная в окружении другая.
В приводимом Вами коде: win32:CONFIG - а это тоже для Windows.

В Linux действительно сложнее. Для того чтобы положить свою библиотеку туда, где лежат остальные, нужны права рута, а они не всегда есть.
Можно в файл проекта прописать:
Код

 unix:QMAKE_RPATHDIR += $$PWD/<путь до библиотеки>

но при этом при переносе на другую машину библиотеку придется разместить по тому же пути или пересобирать программу.

Вместо bat/shell можно написать запускающую программу, действующую аналогично Qt Creator.
Но такая программа не должна в свою очередь использовать dll/so, а поэтому должна быть написана без Qt.

Автор: NoviceF 31.7.2015, 11:11
Цитата(math64 @  31.7.2015,  08:52 Найти цитируемый пост)
такая программа не должна в свою очередь использовать dll/so, а поэтому должна быть написана без Qt.


я как малопонимающий в Qt хочу уточнить, а разве нельзя написать с Qt и слинковать статически?

Автор: math64 31.7.2015, 12:07
Цитата(NoviceF @  31.7.2015,  11:11 Найти цитируемый пост)
я как малопонимающий в Qt хочу уточнить, а разве нельзя написать с Qt и слинковать статически? 

Можно и так, но файл получится большого размера.

Автор: bsa 3.8.2015, 18:26
Если библиотека экспортирует только диалог (экспортируются по сути две функции - создать и уничтожить объект некого класса) или немного функций, то проще решить через динамическую загрузку. В противном случае, библиотеку нужно пихать в /usr/[local/]lib. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)