Russian Qt Forum
Ноябрь 23, 2024, 21:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подключение сторонней библиотеки. Ошибки компиляции  (Прочитано 3858 раз)
bukum
Гость
« : Декабрь 06, 2010, 21:40 »

Создал консольное приложение, подрубил либу стороннюю. Но вылезли ошибки. Это с либой не так че или я накасячил? Просто сделал точь-в-точь как в мануале, но не получается скомпилить....

*.pro
Код:
#-------------------------------------------------
#
# Project created by QtCreator 2010-12-06T20:23:12
#
#-------------------------------------------------

QT       += core

QT       -= gui

TARGET = untitled
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp
INCLUDEPATH += D:/openscenegraph/OpenSceneGraph/include/
INCLUDEPATH += D:/openscenegraph/OpenSceneGraph/include/osg


INCLUDEPATH += C:/Qt/2010.05/qt/src/opengl
LIBS +=-LD:/openscenegraph/OpenSceneGraph/lib

Код:
#include <QtCore/QCoreApplication>

#include <osg/Geode>
#include <osg/Geometry>

#include <iostream>


osg::ref_ptr<osg::Node> createSceneGraph()
{
    osg::ref_ptr<osg::Geometry> geom =new osg::Geometry;
    osg::ref_ptr<osg::Vec3Array> v=new osg::Vec3Array;
    geom->setVertexArray(v.get());
    v->push_back(osg::Vec3(-1.f,0.f,-1.f));
    v->push_back(osg::Vec3(1.f,0.f,-1.f));
    v->push_back(osg::Vec3(1.f,0.f,1.f));
    v->push_back(osg::Vec3(-1.f,0.f,1.f));

    osg::ref_ptr<osg::Vec4Array> v=new osg::Vec4Array;
    geom->setColorArray(c.get());
    geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
    v->push_back(osg::Vec3(1.f,0.f,0.f,1.f));
    v->push_back(osg::Vec3(0.f,1.f,0.f,1.f));
    v->push_back(osg::Vec3(0.f,0.f,1.f,1.f));
    v->push_back(osg::Vec3(1.f,1.f,1.f,1.f));

    osg::ref_ptr<osg::Vec3Array> n= new osg::Vec3Array;
    geom->setNormalArray(n.get);
    geom->setNormalBinding(osg::Geometry::BIND_OVERALL);
    n->push_back(osg::Vec3(0.f,-1.f,0.f));

    geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS,0,4));

    osg::ref_ptr<osg::Geode> geode=new osg::Geode;
    geode->addDrawable(geom.get());

    return geode.get();
}



int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    return a.exec();


}



Ошибки
Цитировать
..\untitled\main.cpp: In function 'osg::ref_ptr<osg::Node> createSceneGraph()':

..\untitled\main.cpp:19: error: conflicting declaration 'osg::ref_ptr<osg::TemplateArray<osg::Vec4f, (osg::Array::Type)11u, 4, 5126> > v'

..\untitled\main.cpp:12: error: 'v' has a previous declaration as 'osg::ref_ptr<osg::TemplateArray<osg::Vec3f, (osg::Array::Type)10u, 3, 5126> > v'

..\untitled\main.cpp:20: error: 'c' was not declared in this scope

..\untitled\main.cpp:22: error: no matching function for call to 'osg::Vec3f::Vec3f(float, float, float, float)'

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:42: note: candidates are: osg::Vec3f::Vec3f(const osg::Vec2f&, float)

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:41: note:                 osg::Vec3f::Vec3f(float, float, float)

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:40: note:                 osg::Vec3f::Vec3f()

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:29: note:                 osg::Vec3f::Vec3f(const osg::Vec3f&)

..\untitled\main.cpp:23: error: no matching function for call to 'osg::Vec3f::Vec3f(float, float, float, float)'

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:42: note: candidates are: osg::Vec3f::Vec3f(const osg::Vec2f&, float)

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:41: note:                 osg::Vec3f::Vec3f(float, float, float)

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:40: note:                 osg::Vec3f::Vec3f()

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:29: note:                 osg::Vec3f::Vec3f(const osg::Vec3f&)

..\untitled\main.cpp:24: error: no matching function for call to 'osg::Vec3f::Vec3f(float, float, float, float)'

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:42: note: candidates are: osg::Vec3f::Vec3f(const osg::Vec2f&, float)

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:41: note:                 osg::Vec3f::Vec3f(float, float, float)

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:40: note:                 osg::Vec3f::Vec3f()

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:29: note:                 osg::Vec3f::Vec3f(const osg::Vec3f&)

..\untitled\main.cpp:25: error: no matching function for call to 'osg::Vec3f::Vec3f(float, float, float, float)'

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:42: note: candidates are: osg::Vec3f::Vec3f(const osg::Vec2f&, float)

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:41: note:                 osg::Vec3f::Vec3f(float, float, float)

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:40: note:                 osg::Vec3f::Vec3f()

d:\openscenegraph\OpenSceneGraph\include/osg/Vec3f:29: note:                 osg::Vec3f::Vec3f(const osg::Vec3f&)

..\untitled\main.cpp:28: error: no matching function for call to 'osg::Geometry::setNormalArray(<unresolved overloaded function type>)'

d:\openscenegraph\OpenSceneGraph\include/osg/Geometry:150: note: candidates are: void osg::Geometry::setNormalArray(osg::Array*)
Записан
UVV
Гость
« Ответ #1 : Декабрь 06, 2010, 22:08 »

1. В pro-файле не написано с чем собрался линковать (одного пути не достаточно, нужны имена библиотек)
2. У тебя ошибки компилятора, а не linker'a. Так что косяки у тебя в коде, до линковке ты ещё не дошёл.
Записан
bukum
Гость
« Ответ #2 : Декабрь 06, 2010, 22:19 »

1. если указать путь до фаила, то он при компиляции пишет что ЭТО НЕ ДИРЕКТОРИЯ.
Код:
cc1plus.exe: error: d:\openscenegraph\OpenSceneGraph\include\osg\Geode: not a directory
2. Я и не могу понять.
createSceneGraph -ф-ия на с++ написана, все классы на с++ этой либы...
Четко её списал с мануала ,но не стартует
« Последнее редактирование: Декабрь 06, 2010, 22:22 от bukum » Записан
bukum
Гость
« Ответ #3 : Декабрь 06, 2010, 22:31 »

сократил до
Код:
osg::ref_ptr<osg::Node> createSceneGraph()
{
    osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
    osg::ref_ptr<osg::Geode> geode=new osg::Geode;
    geode->addDrawable(geom.get());

    return geode.get();
}


debug/main.o: In function `Z16createSceneGraphv':

D:\OpenSceneGraphExample\OSG\examples\osglogo\untitled-build-desktop/../untitled/main.cpp:11: undefined reference to `_imp___ZN3osg8GeometryC1Ev'

D:\OpenSceneGraphExample\OSG\examples\osglogo\untitled-build-desktop/../untitled/main.cpp:34: undefined reference to `_imp___ZN3osg5GeodeC1Ev'

debug/main.o:d:/openscenegraph/OpenSceneGraph/include/osg/Referenced:147: undefined reference to `_imp___ZN11OpenThreads6AtomicppEv'

debug/main.o:d:/openscenegraph/OpenSceneGraph/include/osg/Referenced:164: undefined reference to `_imp___ZN11OpenThreads6AtomicmmEv'

debug/main.o:d:/openscenegraph/OpenSceneGraph/include/osg/Referenced:182: undefined reference to `_imp___ZN3osg10Referenced16getDeleteHandlerEv'
Записан
UVV
Гость
« Ответ #4 : Декабрь 06, 2010, 22:35 »

Во, вот теперь налицо ошибки линкера =)

> если указать путь до фаила, то он при компиляции пишет что ЭТО НЕ ДИРЕКТОРИЯ.
Директории линкеру указываются с помощью больших букв -L, файлы - с помощью маленьких -l.
Записан
bukum
Гость
« Ответ #5 : Декабрь 06, 2010, 22:41 »

Код:
QT       += core

QT       -= gui

TARGET = untitled
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp
INCLUDEPATH += D:/openscenegraph/OpenSceneGraph/include/
INCLUDEPATH += LD:/openscenegraph/OpenSceneGraph/include/osg/Geode
INCLUDEPATH += LD:/openscenegraph/OpenSceneGraph/include/osg/Geometry

INCLUDEPATH += C:/Qt/2010.05/qt/src/opengl
LIBS +=-LD:/openscenegraph/OpenSceneGraph/lib -losg
:: error: cannot find -losg
Записан
bukum
Гость
« Ответ #6 : Декабрь 06, 2010, 23:13 »

или так?
Код:
QT       += core

QT       -= gui

TARGET = untitled
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp
INCLUDEPATH += D:/openscenegraph/OpenSceneGraph/include/
INCLUDEPATH += LD:/openscenegraph/OpenSceneGraph/include/osg -lgeode
INCLUDEPATH += LD:/openscenegraph/OpenSceneGraph/include/osg -lgeometry

INCLUDEPATH += C:/Qt/2010.05/qt/src/opengl
LIBS +=-LD:/openscenegraph/OpenSceneGraph/lib

Вообщем  в этом случае:
Цитировать
debug/main.o: In function `Z16createSceneGraphv':

D:\OpenSceneGraphExample\OSG\examples\osglogo\untitled-build-desktop/../untitled/main.cpp:11: undefined reference to `_imp___ZN3osg8GeometryC1Ev'

D:\OpenSceneGraphExample\OSG\examples\osglogo\untitled-build-desktop/../untitled/main.cpp:34: undefined reference to `_imp___ZN3osg5GeodeC1Ev'

debug/main.o:d:/openscenegraph/OpenSceneGraph/include/osg/Referenced:147: undefined reference to `_imp___ZN11OpenThreads6AtomicppEv'

debug/main.o:d:/openscenegraph/OpenSceneGraph/include/osg/Referenced:164: undefined reference to `_imp___ZN11OpenThreads6AtomicmmEv'

debug/main.o:d:/openscenegraph/OpenSceneGraph/include/osg/Referenced:182: undefined reference to `_imp___ZN3osg10Referenced16getDeleteHandlerEv'
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.082 секунд. Запросов: 20.