[solved] Подключение библиотек



  • Доброго времени суток. Помогите разобраться с qmake. Сидим с другом и разбираемся с библиотекой MathGL. Мой случай:
    .pro:
    INCLUDEPATH += C:/Qt/mathgl-1.11.2-mingw.i686/include
    INCLUDEPATH += C:/Qt/GnuWin32/include
    LIBS += C:/Qt/mathgl-1.11.2-mingw.i686/lib/*
    LIBS += C:/Qt/GnuWin32/lib/* #gsl

    SOURCES +=
    main.cpp

    .cpp:
    @#include <QApplication>
    #include <QtGui>
    #include <mgl/mgl.h>
    #include <mgl/mgl_qt.h>

    int sample(mglGraph *gr, void *)
    {
    return 0;
    }

    int main (int argc, char **argv)
    {
    QApplication a(argc, argv);
    QMathGL *test = new QMathGL;

    test->setDraw(sample, NULL);
    
    return a.exec&#40;&#41;;
    

    }@

    50 раз ругается на undefined reference to ...
    Если делаю в LIBS пути к каждому файлу библиотеки, все равно ругается так же, только уже на другие места. Качал MathGL с офф сайта бинарями в GPL.
    У меня QtCreatro 2.2.1 (последний QtCreator почему-то у меня не работает http://developer.qt.nokia.com/forums/viewthread/9450/) и Qt 4.7.4, Windows 7 SP1.

    Друга:
    .pro:
    QT += core gui

    LIBS += -L/usr/local/lib -lmgl

    TARGET = mathgltest
    TEMPLATE = app

    SOURCES += main.cpp

    Пытается через QMathGL (к примеру мой код), то выдает ошибку " :-1: ошибка: symbol(s) not found for architecture x86_64". А когда делает не через Qt, то работает (у меня и такой не работает, все равно undefined reference to):
    @#include <QApplication>
    #include <QDialog>
    #include <QLabel>
    #include <QPixmap>
    #include <QVBoxLayout>

    #include <mgl/mgl.h>
    #include <mgl/mgl_qt.h>

    int main(int argc, char* argv[])
    {
    //Qt startup
    QApplication a(argc, argv);

    //Using MathGL to write a plot to file
    mglGraphZB plot;
    plot.Alpha(true);
    plot.Light(true);
    plot.Light(0,mglPoint(1,0,-1));
    mglData data(2,2);
    data.Modify("x*y");
    plot.Axis(mglPoint(0,0,0),mglPoint(1,1,1));
    plot.Rotate(80,40);
    plot.Surf(data);
    plot.Box();
    plot.Puts(mglPoint(0.7,1,1.2),"a(x,y)");
    plot.WriteBMP("CppMathGlExample1.bmp");

    //Use Qt to display the saved plot
    QDialog dialog;
    QVBoxLayout layout;
    QPixmap pixmap("CppMathGlExample1.bmp");
    QLabel label;
    label.setPixmap(pixmap);
    layout.addWidget(&label);
    dialog.setLayout(&layout);
    dialog.show();
    return a.exec();
    }
    @
    Друг собирал сам из исходников.
    У него последний SDK, Mac OS X Snow Leopard 10.6.8.

    Ну в общем почему так? Как вообще правильно подключать любую библиотеку?

    И еще вопрос: можно ли в QtCreator 2.2.1 (или вообще в mingw) добавить дефолтные пути к поиску хедеров и либ?



  • ПКМ в .pro файле -> Добавить библиотеку. В появившемся мастере выбираем нужные пункты.
    После этого библиотека должна автоматически прописаться.
    Теперь работает?



  • Другу помогло, а вот мне нет. Там везде формат .a у библиотек, у меня их не видит мастер...



  • У вас должны быть .lib или .dll
    Может вы не то скачали?
    Вы динамически хотите подключать или статически?



  • Нашел их, зачем-то это все в bin суют, а не в lib. Мастер правда только lib хочет, но уже руками дописать смог. Спасибо!



    1. Посмотри на вывод линкера.
      Он там, по идее, должен писать имя ожидаемой библиотеки. Проверь имена своих файлов.

    2. Для ситуации:
      LIBS += -L/usr/local/lib -lmgl
      он, насколько я помню, ищет файл:
      /usr/local/lib/libmgl.a или
      /usr/local/lib/libmgl.so

    В общем, имя файла, который подключает отличается от того, что пишешь в Pro-файле.
    Хотя для VC++ и Windows у меня такого нет...
    Пример:
    unix {
    LIBS += -L../libs -lprotobuf
    }else{
    LIBS += -L../libs -llibprotobuf
    }


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.