Russian Qt Forum

Qt => Общие вопросы => Тема начата: sibmail от Декабрь 22, 2009, 11:55



Название: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: sibmail от Декабрь 22, 2009, 11:55
в силу некоторых обстоятельств пришлось работать с qt3 (в Alt Linux). возникла задача разделения проекта на нескольких людей, каждый из которых отвечает за свой код.
пришли к решению в переносе части кода общего проекта в библиотеки (типа dll в винде).

подскажите как создавать такие библиотеки в линуксе?


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: SASA от Декабрь 22, 2009, 14:25
http://www.prog.org.ru/topic_8259_0.html (http://www.prog.org.ru/topic_8259_0.html) почитай - мож поможет ;)


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: sibmail от Декабрь 22, 2009, 14:40
http://www.prog.org.ru/topic_8259_0.html (http://www.prog.org.ru/topic_8259_0.html) почитай - мож поможет ;)

В общем как я понял никто в этом не разбирается.
Может кто знает почему не работает следующий код:
...
QLibrary lib( "dlltest.so" );
if (!lib.load())
{ qDebug("not load");
 }
...


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: Dendy от Декабрь 23, 2009, 00:43
Не найдена библиотека или одна из зависимостей.

Цитировать
В общем как я понял никто в этом не разбирается.

Да как раз наоборот. Вопрос настолько элементарный, что всем лень разжёвывать (-8


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: ildar от Декабрь 23, 2009, 11:14
а зачем загружать библиотеки вручную?
если набор библиотек известен, можно указать зависимости при сборке проекта. посмотрите как это делается в QtSolutions компонентах.


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: niXman от Декабрь 23, 2009, 12:17
Цитировать
В общем как я понял никто в этом не разбирается.
дык. ты подобную тему создавай в нужном разделе, в линукс например. давно бы получил ответ)
вопросы еще есть?

зы
модераторы, переместите тему в нужный раздел. а то я в эту тему не ходок.


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: pastor от Декабрь 23, 2009, 13:41
В общем как я понял никто в этом не разбирается.

А чем линк на How To от SASA неугодил? Помоему там все расжовано, есть примеры


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: Alex Custov от Декабрь 23, 2009, 15:04
Может кто знает почему не работает следующий код:
...
QLibrary lib( "dlltest.so" );
if (!lib.load())
{ qDebug("not load");
 }
...

Код
Diff
-{ qDebug("not load");
+{ qDebug("not load (%s)", qPrintable(lib.errorString()));
 


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: BRE от Декабрь 23, 2009, 15:17
Код
Diff
-{ qDebug("not load");
+{ qDebug("not load (%s)", qPrintable(lib.errorString()));
 
К сожалению, в Qt3 такого метода нет.  ;)


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: Alex Custov от Декабрь 23, 2009, 15:27
К сожалению, в Qt3 такого метода нет.  ;)

блин, точно ::)


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: pastor от Декабрь 23, 2009, 16:59
К сожалению, в Qt3 такого метода нет.  ;)

..но QString::ascii() никто не отменял (это про qPrintable()) ;)

а errorString() напрочь отсутствует.


Вопрос автору: зачем исползовать QLibrary?


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: sibmail от Декабрь 24, 2009, 07:17
QLibrary для загрузки и работы с библиотекой. Ну не хочется весь код держать в одном приложении.


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: niXman от Декабрь 24, 2009, 07:32
Код
C++ (Qt)
QString is_mi_error = dlerror();
 
для начала посмотри что сообщит тебе эта функция. отпишешься.


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: sibmail от Декабрь 24, 2009, 09:24
невозможно открыть разделяемый объектный файл: Нет такого файла или каталога.
у кого есть примеры к книге Shlee Qt3, раздел DynLib
APPLICATION:
#include <qapplication.h>
#include <qlabel.h>
#include <qlibrary.h>

// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QLabel       lbl("", 0);
    QLibrary     lib("dynlib");

    if (!lib.isLoaded()) {
        lib.load();
    }

    typedef char* (*Fct) ();
    Fct fct = (Fct)(lib.resolve("sayHello"));
    if (fct) {
        lbl.setText(fct());
    }

    app.setMainWidget(&lbl);
    lbl.show();

    return app.exec();
}



Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: niXman от Декабрь 24, 2009, 09:47
вот и ответ.
надеюсь тебе знаком принцип поиска динамических библиотек загрузчиком? и кто такой загрузчик? и как он работает?

все ответы есть тут:
Цитировать
man ld.so

импорт динамической библиотеки:
Цитировать
man ldd

экспорт и всякую информацию можно узнать:
Цитировать
man readelf


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: pastor от Декабрь 24, 2009, 15:21
QLibrary для загрузки и работы с библиотекой. Ну не хочется весь код держать в одном приложении.

Ненужно использовать QLibrary (усложнять себе жизнь). Библиотеку вы пишите сами. Результатом компиляции будет *.a (*.lib на винде)  или *.so (*.dll) файлы. Это для статической и динамической сборки соответсвенно. Полученную либу ципляете к своему проекту и все. *.so будет подгружаться динамически. В случае с *.a - "встроена" в приложение. А использование QLibrary в данном млучае это полный бред.


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: sibmail от Декабрь 24, 2009, 17:45
может кто напишет пример или даст простой исходник?


Название: Re: Вопрос по созданию динамически подключаемых библиотек,
Отправлено: pastor от Декабрь 24, 2009, 17:47
может кто напишет пример или даст простой исходник?

эммм... ну как бы SASA во втором посте темы дал ссылку.. описание исходники там есть. Работает под винду и линукс