查看: 2767|回复: 2

新手请教安装问题

[复制链接]

该用户从未签到

发表于 2009-9-29 18:42:21 | 显示全部楼层 |阅读模式
我下载了osg2.2.0_vs80_setup_2007-10-08.exe安装后还需要安装其它的东西吗?为什么用VC++6.0运行其中的例子时老是报错:fatal error C1083: Cannot open include file: 'osgDB/ReadFile': No such file or directory
Error executing cl.exe. 麻烦高手给解答一下。感激不尽。。。

该用户从未签到

发表于 2009-9-29 22:55:01 | 显示全部楼层
VC++6.0不可能直接运行这个安装包的程序,因为它是用VS80,也就是VS2005编译的;如果您想在VC6上运行OSG,那么必须自己从源代码编译;但是VC6的STL支持有严重的BUG,因此必须先安装STLPort,十分麻烦且不稳定,很不推荐。

不过您的错误提示显然是没有正确设置依赖库的头文件路径所致……请先阅读一下VisualStudio使用方面的教程,这和OSG没有什么关系

该用户从未签到

发表于 2009-10-3 14:52:57 | 显示全部楼层
这是我收集的一个,按照步骤能顺利成功安装。

Windows下编译 OpenSceneGraph-2.0 的方法,主要实现从源代码逐步编译出一个可调试的运行环境.
我主要使用VMWare Server 1.0.7+XP+.NET 2003来测试OSG软件,我也是用这种方法来测试新的软件,

原因在于装错了,可以删除后拷贝备份的文件继续试试软件,不用重新装操作系统,很方便啊.
需要下载的软件包:
OpenSceneGraph-2.0.zip 下载地址
http://www.openscenegraph.org/do ... ses/OpenSceneGraph-

2.0/OpenSceneGraph-2.0.zip

3rdParty_Win32binaries_2005_05_10.zip 下载地址
http://www.openscenegraph.org/do ... inaries_2005_05_10.

zip

cmake-2.4.7-win32-x86.exe 下载地址
http://www.tntdown.cn/download.asp?id=19650&dp=1

msvcr71d.dll 下载地址
http://www.zhaodll.net/dll/downl ... downid=2&id=461

msvcp71d.dll 下载地址
http://www.zhaodll.net/dll/downl ... downid=2&id=456

.NET版本是Microsoft Visual Studio .NET 2003(VC7,Microsoft开发环境 2003版本,Version

7.1.3091)

具体步骤如下:
1、解压缩 OpenSceneGraph-2.0.zip ,3rdParty_Win32binaries_2005_05_10.zip两个文件(方法是

解压到当前文件夹(X)).
2、把3rdParty_Win32binaries_2005_05_10.zip 解压缩出来的文件夹 3rdParty拷贝到

OpenSceneGraph-2.0.zip解压缩出来的文件夹OpenSceneGraph下面.
3、在D:盘下创建一个OSG文件夹,然后把OpenSceneGraph拷贝到这个文件夹下面.
4、安装 cmake-2.4.7-win32-x86.exe ,一切都是缺省.
5、通过 开始-->程序-->CMake2.4-->CMake 运行CMake程序.
6、将D:\OSG\OpenSceneGraph\CMakeLists.txt拖到CMake窗口中.
7、这时在Where is the source code:中会显示D:\OSG\OpenSceneGraph,在Where to build the

binaries:中会显示D:\OSG\OpenSceneGraph,修改binaries这一项,变成

D:\OSG\OpenSceneGraph\build,点击Configure,会弹出一个编译器的选项,自动就行,不用改变,然后

按ok,弹出Create Directory窗口,按 确定.
8、修改 ACTUAL_3DPARTY_DIR这项,由D:/OSG/3rdparty指向D:\OSG\OpenSceneGraph\3rdParty
  修改 BUILD_OSG_ARAPPERS这项,由OFF 改成 ON
  其他不动

  如果你想这时编译例子程序,可以修改BUILD_OSG_EXAMPLES这项,由OFF 改成 ON

参数解释:
ACTUAL_3DPARTY_DIR:即整合的第三方开发库所在目录,如果下载了OSG提供的整合好的第三方开发

库,那么可以在这里设置解压缩之后它的位置,CMake将在下次配置时自动搜索所需的Lib文件和头文

件路径.
BUILD_OSG_EXAMPLES:是否编译OSG所有例子程序的选项.
BUILD_OSG_ARAPPERS: 这一项要选,不然后面编译自己的测试程序的时候,会报无法打开文

件"osgIntrospectiond.lib"错误.
CMAKE_CONFIGURATION_TYPES:定义了工程文件中工程配置的种类,缺省值包括

Debug,Release,MinSizeRel和RelWithDebInfo四种类型.注意不同的配置类型在工程中对应不同的编

译选项,可以在CMAKE_CXX_FLAGS和CMAKE_EXE_LINKER_FLAGS中进行修改.
CMAKE_INSTALL_PREFIX:用于以后保存编译生成的EXE,DLL和LIB文件的路径,在这个路径下会自动建

立bin和lib目录,以便区分存放结果.

9、按下"Configure",进入第二次配置
10、按下"Configure",就会出现 OK可点击的状态
11、先不要急于按下"Configure",点击右上的选框"Show Advanced Values",可以看到列表框中的选

项增加了.这其中很多选项是之前未经选择的.这其中需要重新进行配置的主要是各个第三方开发库

的头文件路径和Lib文件路径;如果用户平台上还有其他GUI库,例如Qt,Fltk,wxWidgets等,那么也需

要在这里重新进行配置.
配置第三方开发库的相关参数时,主要需要配置以下两个参数的值:
……_INCLUDE_DIR:头文件的位置.
……_LIBRARY:需要链接的静态库文件.
12、按下OK键
13、进入D:\OSG\OpenSceneGraph\build文件夹下,选择OpenSceneGraph.sln,在Debug模式下,选择

生成(B)-->生成 ALL_BUILD (U),然后耐心等待,编译好后,在Release模式下,选择 生成(B)-->生成

ALL_BUILD (U),然后耐心等待,最后的效果是,生成了Debug和Release下的Lib和dll库.
14、编译完成后,就开始我们建立环境了.
15、首先在D:\OSG\建一个目录,OSG2.0,在这个目录下分别建debug,release目录,在这些目录下建

lib,bin目录,还要在OSG2.0目录下建一个include目录
具体目录结构如下:
D:\OSG\OSG2.0
  debug
    lib
    bin
  release
    lib
    bin
  include
16、开始拷贝相关文件:
具体步骤如下:
a、include下文件:
  到D:\OSG\OpenSceneGraph\3rdParty\include\下,把所有的文件拷贝到D:\OSG\OSG2.0\include

下.
  到D:\OSG\OpenSceneGraph\include\下,把所有的文件拷贝到D:\OSG\OSG2.0\include下.

b、debug文件夹下的bin中的文件:
  把下载后的msvcp71d.dll和msvcr71d.dll文件解压后,拷贝到debug\bin下.
  到D:\OSG\OpenSceneGraph\3rdParty\bin\下,把所有D.dll结尾的文件拷贝到debug\bin下.
  到D:\OSG\OpenSceneGraph\build\lib\debug\下,把所有的.dll结尾的文件结尾的文件拷贝到

debug\bin下.
  到D:\OSG\OpenSceneGraph\build\lib\osgPlugins-2.0.0\debug\下,把所有的.dll结尾的文件结

尾的文件拷贝到debug\bin下.

c、debug文件夹下的lib中的文件:
  到D:\OSG\OpenSceneGraph\3rdParty\lib\下,把所有D.lib结尾的文件,拷贝到debug\lib下.
  到D:\OSG\OpenSceneGraph\build\lib\debug\下,把所有lib结尾的文件,拷贝到debug\lib下.

17、设置环境变量 系统变量
(我的电脑-->属性-->高级-->环境变量-->系统环境变量-->编辑(I))
  Path在后面添加  ;D:\OSG\OSG2.0\debug\bin;
新建(W)
  OSG_NOTIFY_LEVEL DEBUG_FP
  OSG_ROOT     D:\OSG\OSG2.0\debug\
  OSG_FILE_PATH    D:\OSG\OSG2.0\data\

18、修改屏幕属性(属性-->设置-->颜色(C)-->选择 真彩色(32位)-->确定)
  然后注销用户,重新登录系统就可以了.

19、开始配置VC7项目

启动Microsoft Visual Studio .NET 2003(VC7,Microsoft开发环境 2003版本,Version 7.1.3091),

建立一个Win32控制台项目,在应用程序设置选项卡里,选择空项目,点击完成.为了在工程选项里出现

C/C++的选项,先给工程添加一个空的C++源文件.
具体步骤:文件(F)-->新建(N)-->项目(P)-->Visual C++项目-->Win32项目-->名称(N):Test-->确定

-->应用程序设置-->选中 控制台应用程序(O)-->选中 空项目(E) -->完成-->在右边 解决方

案"Test"下 选择 源文件 右击-->添加(D)-->添加新项(W)-->C++文件(.cpp)-->名称(N): Test-->

打开(O)

OpenSceneGraph运行需要多线程DLL的运行时库和RTTI,所以,在建立每个OpenSceneGraph工程后,第

一件事就是更改工程设置.

(由于我们现在使用的是Release版本,所以只用填写Release信息)
具体步骤:项目(Test) 属性-->配置(C)-->Release

打开项目属性,在C/C++选项卡里,点击代码生成页,更改运行时库,对于Debug版,用多线程调试 DLL

(/Mdd),对于Release版,用多线程 DLL (/MD).
具体步骤:C/C++-->代码生成-->运行时库-->Debug版多线程调试 DLL (/Mdd)
//Release版,用多线程 DLL(/MD)这里只提出来,不用设置

设置C/C++选项卡里的语言页的启用运行时类型信息为:是(/GR).(Debug版下设置)
具体步骤:C/C++-->语言-->启用运行时类型信息-->是(/GR)-->确定

OpenSceneGraph程序需要链接对应的库文件,打开链接器选项卡里的输入页,设置附加依赖项,对于

Debug版,是

OpenThreadsd.lib,osgd.lib,osgDBd.lib,osgFXd.lib,osgGAd.lib,osgIntrospectiond.lib,osgMan

ipulatord.lib,osgParticled.lib,osgShadowd.lib,osgSimd.lib,osgTerraind.lib,osgTextd.lib,

osgUtild.lib,osgViewerd.lib,对于Release版,设置这些lib文件不带"d"的版本.
(由于我们现在使用的是Debug版本,所以只用填写Debug信息)
具体步骤:链接器-->输入-->附加依赖项 中填写
OpenThreadsd.lib
osgd.lib
osgDBd.lib
osgFXd.lib
osgGAd.lib
osgIntrospectiond.lib
osgManipulatord.lib
osgParticled.lib
osgShadowd.lib
osgSimd.lib
osgTerraind.lib
osgTextd.lib
osgUtild.lib
osgViewerd.lib
-->确定-->确定

设置编译时头文件路径
工具-->选项-->项目-->VC++ 目录-->显示以下内容的目录(S)-->包含文件-->在最后面创建一个新

的目录-->最后行的地方双击,添上 D:\OSG\OSG2.0\include 一项

设置编译时库文件路径
工具-->选项-->项目-->VC++ 目录-->显示以下内容的目录(S)-->库文件-->在最后面创建一个新的

目录-->最后行的地方双击,添上 D:\OSG\OSG2.0\debug\lib


这样,工程属性就设置好了.




•        对我有用[0]
•        丢个板砖[0]
•        引用
•        举报
•        管理
•        TOP
回复次数:2
•         
•        merryboy
•       
•        等 级:  
•                #1楼 得分:0回复于:2008-11-25 05:01:09
7、编辑程序
首先 在左尖三角 选择成Debug
然后在刚才建立的空文件里输入如下内容:

#include <osgUtil/Optimizer>
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>

#include <osg/Material>
#include <osg/Geode>
#include <osg/BlendFunc>
#include <osg/Depth>
#include <osg/Projection>
#include <osg/AutoTransform>
#include <osg/Geometry>

#include <osgText/Text>

#include <iostream>

osg::Node* createLabel(const osg::Vec3& pos, float size, const std::string& label,

osgText::Text::AxisAlignment axisAlignment)
{
    osg::Geode* geode = new osg::Geode();
   
    std::string timesFont("fonts/arial.ttf");

    {
        osgText::Text* text = new  osgText::Text;
        geode->addDrawable( text );

        text->setFont(timesFont);
        text->setPosition(pos);
        text->setCharacterSize(size);
        text->setAxisAlignment(axisAlignment);
        text->setAlignment(osgText::Text::CENTER_CENTER);
        text->setText(label);
        
    }
   
    return geode;   
}


osg::Node* createLabel3(const osg::Vec3& pos, float size, const std::string& label)
{
    osg::Geode* geode = new osg::Geode();
   
    std::string timesFont("fonts/arial.ttf");

    {
        osgText::Text* text = new  osgText::Text;
        geode->addDrawable( text );

        text->setFont(timesFont);
        text->setPosition(pos);
        text->setFontResolution(40,40);
        text->setCharacterSize(size);
        text->setAlignment(osgText::Text::CENTER_CENTER);
        text->setAutoRotateToScreen(true);
        text->setCharacterSizeMode

(osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT);
        text->setText(label);
        
    }
   
    return geode;   
}

osg::Node* createAxis(const osg::Vec3& s, const osg::Vec3& e, int numReps,

osg::AutoTransform::AutoRotateMode autoRotateMode, osgText::Text::AxisAlignment

axisAlignment, const std::string& str)
{
    osg::Group* group = new osg::Group;

    osg::Vec3 dv = e-s;
    dv /= float(numReps-1);

    osg::Vec3 pos = s;

    bool useAuto = true;
    if (useAuto)
    {
        osg::Vec3Array* vertices = new osg::Vec3Array;

        for(int i=0;i <numReps;++i)
        {
            osg::AutoTransform* at = new osg::AutoTransform;
            at->setPosition(pos);
            at->setAutoRotateMode(autoRotateMode);
            at->addChild(createLabel(osg::Vec3(0.0f,0.0f,0.0f),dv.length()*0.2f,str,

axisAlignment));
            vertices->push_back(pos);
            pos += dv;


            group->addChild(at);
        }

        osg::Vec4Array* colors = new osg::Vec4Array;
        colors->push_back(osg::Vec4(1.0f,1.0f,1.0f,1.0f));

        osg::Geometry* geom = new osg::Geometry;
        geom->setVertexArray(vertices);
        geom->setColorArray(colors);
        geom->addPrimitiveSet(new osg:rawArrays(GL_LINE_STRIP,0,vertices->size()));

        osg::Geode* geode = new osg::Geode;
        geode->addDrawable(geom);

        group->addChild(geode);
    }
    else
    {
        osg::Vec3Array* vertices = new osg::Vec3Array;

        for(int i=0;i <numReps;++i)
        {
            group->addChild(createLabel3(osg::Vec3(pos),dv.length()*0.5f,str));
            vertices->push_back(pos);
            pos += dv;


        }

        osg::Vec4Array* colors = new osg::Vec4Array;
        colors->push_back(osg::Vec4(1.0f,1.0f,1.0f,1.0f));

        osg::Geometry* geom = new osg::Geometry;
        geom->setVertexArray(vertices);
        geom->setColorArray(colors);
        geom->addPrimitiveSet(new osg::DrawArrays(GL_LINE_STRIP,0,vertices->size()));

        osg::Geode* geode = new osg::Geode;
        geode->addDrawable(geom);

        group->addChild(geode);
    }
   
    return group;
}

osg::Node* createScene()
{
    osg::Group* root = new osg::Group;
   
//    int numReps = 3333;
    int numReps = 10;
    root->addChild(createAxis(osg::Vec3(0.0,0.0,0.0),osg::Vec3

(1000.0,0.0,0.0),numReps,osg::AutoTransform::ROTATE_TO_CAMERA,osgText::Text::XY_PLANE,

"ROTATE_TO_CAMERA"));
    root->addChild(createAxis(osg::Vec3(0.0,0.0,0.0),osg::Vec3

(0.0,1000.0,0.0),numReps,osg::AutoTransform::ROTATE_TO_SCREEN,osgText::Text::XY_PLANE,

"ROTATE_TO_SCREEN"));
    root->addChild(createAxis(osg::Vec3(0.0,0.0,0.0),osg::Vec3

(0.0,0.0,1000.0),numReps,osg::AutoTransform::NO_ROTATION,osgText::Text::XZ_PLANE,

"NO_ROTATION"));   
   
    return root;
}

int main(int, char**)
{
    // construct the viewer.
    osgViewer::Viewer viewer;

    // set the scene to render
    viewer.setSceneData(createScene());
   
    // run the viewers frame loop
    return viewer.run();
}


保存文件(Ctrl+S)-->按F5-->是(Y) ,显示结果.


错误信息sg fatal error C1060: 编译器的堆空间不足
解决方法:重新安装.NET 2003版本或更高版本的编译环境.
Microsoft Visual Studio .NET 2002(VC7,Microsoft开发环境 2002版本,Version 7.0.9486)会出

现的问题

错误信息:test fatal error LNK1104: 无法打开文件"osgIntrospectiond.lib"
解决方法:修改 BUILD_OSG_ARAPPERS这项,由OFF 改成 ON,在CMake中设置哈.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表