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


Автор: Rage 14.12.2009, 17:13
Привет всем!

Объясните, пожалуйста, как корректно создавать и подключать статические библиотеки в Qt?
(предполагается импорт функций и классов)

Пытаюсь создать "интуитивно", что-то получается похожее на библиотеку - создаётся файл с расширением *.a (почему не lib?!) 
Но при попытке использовать эту библиотеку, начинают вылезать ошибки типа

undefined reference to `_imp___ZN9LinAlgLibC1Ev'

Ничего не понимаю =)))
Можт какие-нибудь дополнительные директивы нужно добавить? 

Спасибо

Автор: Elfet 16.12.2009, 15:32
Цитата(Rage @  14.12.2009,  18:13 Найти цитируемый пост)
создаётся файл с расширением *.a (почему не lib?!) 

Это из за того что собираешь при помощи minGW, а не студией.

Самый просто способ:
myLib.pro
Цитата

QT       -= gui

TARGET = mylib
TEMPLATE = lib
CONFIG += staticlib

SOURCES += mylib.cpp

HEADERS += mylib.h


Какой-то проект.pro:
Цитата

....

INCLUDEPATH += ./...путь до header-ов (.h).../mylib/
LIBS += ./...путь до библиотеки (.a).../mylib/debug/libmylib.a

...


Затем в нужно файле .cpp:
Код

#include "mylib.h"

int main()
{
    
    MyLib lib;

    lib.DoSomething();
    
    return 0;
}



И всё должно зароботать smile

Автор: w1zard350 24.5.2010, 22:17
Здавствуйте. У меня возникла такая проблема:

Получается на каждую компоненту большого проекта я создаю отдельную статическую библиотеку (незнаю или так правильно). Все шло нормально до тех пор, пока одна библиотека не начала включать другую. 

Суть проблемы: 
Есть библиотека "A". Есть библиотека "B". В свою очередь библиотека "B" подключает библиотеку "А". Все хорошо. Теперь я создаю библиотеку "C", которая включает как "А", так и "В". Сборка происходит нормально, но использовать библиотеку "C" уже нельзя. Возникают ошибки "undefined reference to". 

Все делаю через QtCreator и подключаю либы по примеру выше. Скорее всего у меня подход какой-то не правильный, но как тогда мне сделать? 

Автор: w1zard350 25.5.2010, 10:34
Немного помучался и понял, что у меня все-таки подход не верный. В инете почитал про компиляцию и все стало на свои места. http://www.firststeps.ru/linux/general1.html все очень хорошо написано. 

Как я понял, нам не нужно создавать много библиотек. Достаточно создавать только одну, дополняя ее компонентами. Кстати о причине неработоспособности моего подхода выше я пока не понял.

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