Russian Qt Forum

Qt => Вопросы новичков => Тема начата: CJ1 от Июнь 04, 2013, 10:00



Название: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:00
Всем привет, проблема такая.
Стоит VirtualBox, на ней Linux ubuntu, создаю общую папку rems-loco, монтирую ее в /mnt/gui/gui.
Там создаю проект на винде, на линукси компилю.
Все вроде работает, НО Хочу создать динамическую библиотеку QIOMCDevice.
Собственно создаю папку /mnt/gui/gui/QIOMCDevice. Там создаю динамическую библиотеку, и на стадии make
создается только libQIOMCDevice.so.1.0.0

Что с ним дальше делать? Как подключить?

в .pro файле проекта пишу
LIBS += \
    libQIOMCDevice.so

он ее не находит! Как быть?


Название: Re: Динамические библиотеки Linux
Отправлено: m_ax от Июнь 04, 2013, 10:06
Всем привет, проблема такая.
Стоит VirtualBox, на ней Linux ubuntu, создаю общую папку rems-loco, монтирую ее в /mnt/gui/gui.
Там создаю проект на винде, на линукси компилю.
Все вроде работает, НО Хочу создать динамическую библиотеку QIOMCDevice.
Собственно создаю папку /mnt/gui/gui/QIOMCDevice. Там создаю динамическую библиотеку, и на стадии make
создается только libQIOMCDevice.so.1.0.0

Что с ним дальше делать? Как подключить?

в .pro файле проекта пишу
LIBS += \
    libQIOMCDevice.so

он ее не находит! Как быть?

LIBS += -L$$LIB_PATH  -lQIOMCDevice


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:09
неработает!!!
Но я понял! Мне нужна недистрибутивно скомпилировать библиотеку!! Только как это сделать?


Название: Re: Динамические библиотеки Linux
Отправлено: m_ax от Июнь 04, 2013, 10:13
неработает!!!
Но я понял! Мне нужна недистрибутивно скомпилировать библиотеку!! Только как это сделать?
Не работает - пишется раздельно)

LIB_PATH - инициирована?


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:13
Вот мой .pro файл!

Цитировать
#-------------------------------------------------
#
# Project created by QtCreator 2013-06-04T11:49:47
#
#-------------------------------------------------

QT       -= gui

TARGET = QIOMCDevice
TEMPLATE = lib

DEFINES += QIOMCDEVICE_LIBRARY

SOURCES += qiomcdevice.cpp

HEADERS += qiomcdevice.h\
        qiomcdevice_global.h

unix:!symbian {
    maemo5 {
        target.path = /opt/usr/lib
    } else {
        target.path = /usr/lib
    }
    INSTALLS += target
}

Как мне сделать что бы в итоге появлялся только .so


Название: Re: Динамические библиотеки Linux
Отправлено: mutineer от Июнь 04, 2013, 10:13
Цитировать
нужна недистрибутивно скомпилировать библиотеку
что это значит?

И окромя "неработает" хотелось бы увидеть конкретную ошибку


Название: Re: Динамические библиотеки Linux
Отправлено: mutineer от Июнь 04, 2013, 10:15
Как мне сделать что бы в итоге появлялся только .so

Тебе нужно создать символические ссылки libQIOMCDevice.so.1.0, libQIOMCDevice.so.1, libQIOMCDevice.so, которые будут указывать на libQIOMCDevice.so.1.0.0. Странно что они сами не создались во время сборки


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:16
объясняю! В линуксе, выдумана какаето фигня с версиями so.1 so.2.0.0 и так далее. мне этот бред не нужен!
Мне нужно чтобы появился .so файл я его копернул в каталог с программой и все работало! Как это сделать?


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:17
Цитировать
Странно что они сами не создались во время сборки
ничего странного! команда ln во время сборки говорит что не может работать с файловой системой VirtualBox!


Название: Re: Динамические библиотеки Linux
Отправлено: mutineer от Июнь 04, 2013, 10:19
Цитировать
Странно что они сами не создались во время сборки
ничего странного! команда ln во время сборки говорит что не может работать с файловой системой VirtualBox!

Переименуй файл тогда, раз у тебя файловая система без ссылок


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:19
ln failed to create symbolic link `libQIOMDevice` : Read-only file system


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:20
Цитировать
Переименуй файл тогда, раз у тебя файловая система без ссылок
пробовал переименовать в libQIOMCDevice.so
Тогда при запуске программа говорит ей нужен libQIOMCDevice.so.1


Название: Re: Динамические библиотеки Linux
Отправлено: mutineer от Июнь 04, 2013, 10:22
Цитировать
Переименуй файл тогда, раз у тебя файловая система без ссылок
пробовал переименовать в libQIOMCDevice.so
Тогда при запуске программа говорит ей нужен libQIOMCDevice.so.1

Вот поэтому в линуксе и есть эта чехарда с символическими ссылками на либы - приложение при линковке хочет .so, а при запуске .so.*. Попробуй так:
LIBS    += -l:libQIOMCDevice.so


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:24
Всеравно просит .so1


Название: Re: Динамические библиотеки Linux
Отправлено: mutineer от Июнь 04, 2013, 10:25
Ну тогда я вижу только два варианта - сделать ссылки, либо не линковаться, а грузить в рантайме


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:25
ВОт! Тут пишется про недистрибутивную компиляцию
http://habrahabr.ru/post/122757/


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:26
Дистрибутивная компиляция от недистрибутивной отличается тем, что в дистрибутивном случае динамические библиотеки ищутся в /usr/lib и имеют вид lib$(NAME).so.$(VERSION), в случае недистрибутивной компиляции они называются lib$(NAME).so, а ищутся в каталоге запуска программы.


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:34
Ну помогите! Я уже замучался
Как вобще переносить проекты? Если они строго привязаны в /usr/lib??
что за *****???????


Название: Re: Динамические библиотеки Linux
Отправлено: mutineer от Июнь 04, 2013, 10:47
Так ты же нашел уже про недистрибутивную компиляцию. Чем еще помогать?


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 10:48
Как это сделать на Qt?


Название: Re: Динамические библиотеки Linux
Отправлено: mutineer от Июнь 04, 2013, 10:50
Как вобще переносить проекты? Если они строго привязаны в /usr/lib??

Устанавливать либы в /usr/lib при установке проекта. или делать rpath


Название: Re: Динамические библиотеки Linux
Отправлено: alex312 от Июнь 04, 2013, 10:58
http://www.qtcentre.org/threads/40128-How-to-set-rpath-in-Qt-Project


Название: Re: Динамические библиотеки Linux
Отправлено: CJ1 от Июнь 04, 2013, 12:20
ОК! Так сделал...


Название: Re: Динамические библиотеки Linux
Отправлено: Alex Custov от Июнь 04, 2013, 14:48
объясняю! В линуксе, выдумана какаето фигня с версиями so.1 so.2.0.0 и так далее. мне этот бред не нужен!

какие злые эти дяди, выдумывают всякую фигню.


Название: Re: Динамические библиотеки Linux
Отправлено: Alex Custov от Июнь 04, 2013, 14:50
Ну помогите! Я уже замучался
Как вобще переносить проекты? Если они строго привязаны в /usr/lib??
что за *****???????

Строго они не привязаны, изучи инструмент с которым работаешь. Библиотеки ищутся по некоторым путям, настроенным в ld.so.conf, куда входит /usr/lib в том числе. Если нужно распространять свою библиотеку, то её подгружают с помощью LD_LIBRARY_PATH