Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: X_F1 в Sep 13, 2010, 07:34



Титла: Как се създават и използват библиотеки в Qt4
Публикувано от: X_F1 в Sep 13, 2010, 07:34
Здравейте! Нов съм в Qt4 (от два месеца!

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

Код
GeSHi (C++):
  1. release/mainwindow.o:mainwindow.cpp:(.text+0xbd): undefined reference to `_imp___ZN5LibesC1Ev'
  2. release/mainwindow.o:mainwindow.cpp:(.text+0x11d): undefined reference to `_imp___ZN5LibesC1Ev'

Може ли да ми дадете линк към статия, или да ми обясните как става номера, като фатката е - да създам библиотеката през Qt Creator, и през QtCreator да я инклудна в моя си проект. Смятам да я ползвам в повече от един проект!

Благодаря!


Титла: Re: Как се създават и използват библиотеки в Qt4
Публикувано от: remotex в Sep 13, 2010, 09:36
http://doc.trolltech.com/latest/qmake-project-files.html#declaring-other-libraries

Какво добавяш : само заглавния файл или и изпълнимия т.е. LIBS += и/ли INCLUDEPATH = трябва и двете, после зависи дали е qmake или cmake project ...
Я най-добре намери и прочети в помощната информация следната секция "External Libraries"


Титла: Re: Как се създават и използват библиотеки в Qt4
Публикувано от: task_struct в Sep 13, 2010, 10:53
Ето ти и за cmake проект: http://techbase.kde.org/Development/Tutorials/Creating_Libraries :)


Титла: Re: Как се създават и използват библиотеки в Qt4
Публикувано от: X_F1 в Sep 14, 2010, 17:26
Ето ти и за cmake проект: http://techbase.kde.org/Development/Tutorials/Creating_Libraries :)
Аз използвам чист Qt4. Ако може да е точно за Qt4.  :)


Титла: Re: Как се създават и използват библиотеки в Qt4
Публикувано от: bvbfan в Sep 14, 2010, 19:38
http://doc.qt.nokia.com/latest/qlibrary.html - зареждане на споделени библиотеки
http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C++
http://www.qtforum.org/article/33701/shared-library.html


Титла: Re: Как се създават и използват библиотеки в Qt4
Публикувано от: X_F1 в Sep 15, 2010, 14:31
Пак не става.  :(

QLibrary *l = new QLibrary("lib1.dll");
    l->load();

    l->resolve("Lib1::showButton()");

обаче - пак не дава.  :( В случая не показва бутона!


Титла: Re: Как се създават и използват библиотеки в Qt4
Публикувано от: bvbfan в Sep 15, 2010, 15:37
Цитат
("Lib1::showButton()");
Това действие не е възможно при която и да е ОС, не може да вземеш указател към статична функция от клас без да си създал класа, тъй като няма кой да извика конструктора.
Това се прави така:
class Myclass {
 Myclass() {}
 int func1();
 char *funcN();
};
extern "C"
{
    Myclass* getClass();
    typedef Myclass*(*func)();
}

Хедър файла трябва да е и в двата проекта

В динамичната библиотека

int Myclass::func1() { return 50; }
char* Myclass::funcN() { return "This is version 1.0"; }

Myclass* getClass()
{
   Myclass *p = new Myclass;
   return p;
}

В програмата, къде зареждаш библиотеката

QLibrary *l = new QLibrary("lib1.dll");
    l->load();

    Myclass *f = (func)l->resolve("getClass");
    if( f != NULL )
      puts( f->funcN() );

example ($2)

На линукс библиотеките трябва да са импортнати в Path или сложи симболик линк в /usr/lib/ към твойта библиотека


Титла: Re: Как се създават и използват библиотеки в Qt4
Публикувано от: task_struct в Sep 15, 2010, 20:07
Според мен подхода с QLibrary не е най-доброто решение в този случай. QLibrary е подходяща в случайте, когато искаш да заредиш определен код, само ако е нужно. На пример, имаш много плъгини, които не са нужни непрекъснато, а само ако потребителя заяви желание да ги използва. За библиотека, която ще предоставя някаква функционалност на много приложения, е по-добре (даже си е задължително) да се инсталира отделно и приложенията да са линкнати към нея, както е обяснено тук: http://doc.trolltech.com/latest/qmake-project-files.html#declaring-other-libraries