无法在 Windows 上将 OSG 与 GDAL 一起使用

Posted

技术标签:

【中文标题】无法在 Windows 上将 OSG 与 GDAL 一起使用【英文标题】:Can't use OSG with GDAL on Windows 【发布时间】:2019-03-19 08:52:38 【问题描述】:

我在 Windows 10 x64 上工作

IDE:QtCreator 4.8.0 基于 Qt 5.12.0(MSVC 2015,32 位)

如果需要,我的 .pro 文件的内容位于最底部。

有一个最小的 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】:

问题是该库需要 libgdal-20.dll 才能工作。我没有指定.dll 的路径。所以我通过将 .dll 文件复制到包含二进制文件的文件夹中来解决了这个问题。现在它工作正常。

【讨论】:

以上是关于无法在 Windows 上将 OSG 与 GDAL 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

osgEarth设置模型旋转角度

osg model

Win64下编译OSG详细过程(Win10+VS2015+OSG3.6.3)

无法在Windows上将SonarQube 5.3作为服务运行

如何在带有 MinGW 的 Windows 中使用 <gdal/gdal.h>?

python rasterio库和gdal库匹配与冲突问题安装办法