OSG не работает с GDAL на Windows 10

133
08 декабря 2019, 20:40

Работаю на Windows 10 x64 IDE: QtCreator 4.8.0 Based on Qt 5.12.0 (MSVC 2015, 32 bit) Содержание .pro файла в самом низу, если он нужен.

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

#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <ogrsf_frmts.h>
int main(int argc, char *argv[]) {
   // OGRPoint p;
    osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("../resourses/cessna.osg");
    osgViewer::Viewer viewer;
    viewer.setSceneData(root.get());
    return viewer.run();
}

Компилируется, запускается и отображает самолет (модель cessna.osg). Но если я раскомментирую первую строчку, то код тоже компилируется и запускается, но окно с самолетом не появляется. Словно у меня пустой main. На линуксе этот же код работает отличано. Почему так может происходить?

.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 !>
Answer 1

Проблема была в том, что к библиотеке GDAL прилагается libgdal-20.dll, путь к которому я не прописал. Решил тем, что скопировал .dll файл в каталог с бинарником и все заработало.

READ ALSO
Для чего нужен static_cast, как он работает и где его применяют?

Для чего нужен static_cast, как он работает и где его применяют?

Для чего нужен static_cast, как он работает и где его применяют?

149
Изменть стиль, размер и тип шрифта в Qt

Изменть стиль, размер и тип шрифта в Qt

У меня есть три чекбокса, QFontComboBox и QSpinBox, а также главное текстовое поле QTextEdit

120
C++ &mdash; линковка статических библиотек на linux в CMake

C++ — линковка статических библиотек на linux в CMake

На Windows в Visual Studio было достаточно раскидать файлы по специальным папкам и прописать:

157
Обращение к объекту из ArrayList по его полям

Обращение к объекту из ArrayList по его полям

Уважаемые сэнсэи, гуру и мастера Йоды Java, нужна подмогаСитуация тривиальная, но тревожащая мой покой

151