Не могу использовать OSG с GDAL в Windows - PullRequest
0 голосов
/ 19 марта 2019

Я работаю в Windows 10 x64

IDE: QtCreator 4.8.0 На основе Qt 5.12.0 (MSVC 2015, 32 бит)

Содержимое моего файла .pro находится на оченьbottom, если это необходимо.

Существует минимальный пример OSG (main.cpp) :

#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <ogrsf_frmts.h>

int main(int argc, char *argv[]) {
   // OGRPoint p; //breakpoint 1
    osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("../resourses/cessna.osg"); //breakpoint 2
    osgViewer::Viewer viewer;
    viewer.setSceneData(root.get());

    return viewer.run();
}

В приведенном выше коде вы можете видеть, где я устанавливаю точки останова.

Итак:

В случае с комментариями OGRPoint p;: компилируется, запускается, останавливается на «точке останова 2», а когда я иду вперед, он показывает самолет (модель "cessna.osg").Это правильное поведение.

В случае без комментариев OGRPoint p;: компилирует, запускает и игнорирует обе точки останова.Это ничего не показывает.Как будто у меня ничего не было в моем main.Если я делаю это на Linux, то он работает нормально.Почему это может произойти?

.pro файл, если он влияет на :

TEMPLATE = app
TARGET = hello
QT -= gui
CONFIG += c++11 console
CONFIG -= app_bundle

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


#<--------------------- OSG Library
win32 {

    OSG_LIB_DIRECTORY = $$(OSG_BIN)
    OSG_INCLUDE_DIRECTORY = $$(OSG_INCLUDE)

    CONFIG(debug, debug|release) {

        TARGET = $$join(TARGET,,,_d)

        LIBS += -L$$OSG_LIB_DIRECTORY -losgd
        LIBS += -L$$OSG_LIB_DIRECTORY -losgViewerd
        LIBS += -L$$OSG_LIB_DIRECTORY -losgDBd
        LIBS += -L$$OSG_LIB_DIRECTORY -lOpenThreadsd
        LIBS += -L$$OSG_LIB_DIRECTORY -losgUtild
        LIBS += -L$$OSG_LIB_DIRECTORY -losgGAd
    } else {

        LIBS += -L$$OSG_LIB_DIRECTORY -losg
        LIBS += -L$$OSG_LIB_DIRECTORY -losgViewer
        LIBS += -L$$OSG_LIB_DIRECTORY -losgDB
        LIBS += -L$$OSG_LIB_DIRECTORY -lOpenThreads
        LIBS += -L$$OSG_LIB_DIRECTORY -losgUtil
        LIBS += -L$$OSG_LIB_DIRECTORY -losgGA

    }

    INCLUDEPATH += $$OSG_INCLUDE_DIRECTORY
}

unix {

    CONFIG(debug, debug|release) {

        TARGET = $$join(TARGET,,,_d)

        LIBS += -losgd
        LIBS += -losgViewerd
        LIBS += -losgDBd
        LIBS += -lOpenThreadsd

    } else {

        LIBS +=  -losg
        LIBS +=  -losgViewer
        LIBS +=  -losgDB
        LIBS +=  -lOpenThreads

    }
}
#--------------------- OSG Library !>

HEADERS += $$OSG_INCLUDE_DIRECTORY


#<--------------------- GDAL Library
win32 {
    INCLUDEPATH += D:/Interface/Work/Libs/gdal/include/
    LIBS += D:/Interface/Work/Libs/gdal/lib/libgdal-20.dll
}

unix {
    LIBS += -L/usr/local/lib -lgdal
}
#--------------------- GDAL Library !>

1 Ответ

0 голосов
/ 19 марта 2019

Проблема заключалась в том, что для работы библиотеки требовался libgdal-20.dll.Я не указал путь к .dll.Поэтому я решил эту проблему, скопировав DLL-файл в папку с двоичными файлами.Теперь работает нормально.

...