查看: 4582|回复: 13

海军的例子 自己出错了

[复制链接]

该用户从未签到

发表于 2008-4-17 17:39:08 | 显示全部楼层 |阅读模式
为什么我在VC6.0编译海军的例子一会出现下面的错误
error C2061: syntax error : identifier 'GraphicsContext'
error C2143: syntax error : missing ',' before '*'
error C2059: syntax error : '*'

该用户从未签到

发表于 2008-4-17 18:05:44 | 显示全部楼层

VC6.0下OSG得自己重新编译源代码,并且还有很多地方要修改和更新,如配置STL等,,,比较麻烦~~~~~~~~

该用户从未签到

 楼主| 发表于 2008-4-18 16:13:59 | 显示全部楼层
那怎么办?VC6下面学习不了OSG了?

另外,再问一下:
     为什么没有在海军的第一个例子中,看到智能指针的出现?

[ 本帖最后由 小艾久久 于 2008-4-18 16:15 编辑 ]

该用户从未签到

发表于 2008-4-18 16:47:26 | 显示全部楼层
VC6对于STL的支持很差,因此不适合用来编译OSG,在生成源代码时会发生错误。一种解决方案是使用STLPort这款第三方制作的标准STL库替代VC6的STL,这样是可以编译通过并运行OSG程序的。但是强烈不建议使用VC6来开发OSG程序,且OSG官方也已声明不会再对VC6平台提供技术支持~~
现阶段建议安装VS2003来替代古董级的VC6,对STL的支持好过VS2005,且速度够快。

至于NPS的有些教程为什么不使用ref_ptr,这不过是作者的习惯问题,ref_ptr并非OSG编程的必需,不过是为内存管理提供了很大方便而已。事实上,我们也可以根据自己的需要来决定是否使用智能指针来分配模型节点的内存~~

该用户从未签到

发表于 2008-4-18 16:50:17 | 显示全部楼层
此外,根据楼主提供的错误信息……
似乎是GraphicsContext类的声明没有找到?可以把相应的头文件包含进去再编译试一试,不过如果您没有安装STLPort之类的第三方STL库的话,恐怕还是难以成行~~没办法,诅咒MicroSoft对STL的差劲支持好了

该用户从未签到

发表于 2008-4-18 19:31:24 | 显示全部楼层


很早的一篇文章,如果想在VC6.0下编译的话,应该会有帮助的~~~~~~~~~~~~~~


环境:windows XP,MSVC6.0+SP5+STLport4.6.2,OSG0.9.6

步骤1: 设置环境变量。在环境变量—〉系统变量中的path后面追加OSG整体程序的bin目录(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/bin)。在环境变量—〉用户变量中新建变量OSGinclude,值为:E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/include;新建变量OSGlib,值为:E:/OSGO/SG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/lib;新建变量STLlib,值为:C:/Program Files/Microsoft Visual Studio/VC98/STLport-4.6.2/lib。

步骤2: 配置STL。将STLport lib库中的(如C:/Program Files/Microsoft Visual Studio/VC98/STLport-4.6.2/lib)stlport_vc6.lib拷贝到VC的lib库中(如C:/Program Files/Microsoft Visual Studio/VC98/Lib)(说明:一般情况下拷贝stlport_vc6.lib就可以了,但不同的example有不同的要求,可能还需要其他STL的lib文件,大家可以根据需要添加或直接在工程中进行相应设置)。然后将STLport lib库中的两个dll文件stlport_vc6_stldebug46.dll和stlport_vc646.dll拷贝到OpenSceneGraph(以下简称OSG)的bin下(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/bin)。打开C:/Program Files/Microsoft Visual Studio/VC98/STLport-4.6.2/stlport/stl_user_config.h,在第59行将// #define     _STLP_NO_NEW_IOSTREAMS        1前面的注释去掉(MSVC6.0的STL版本太低,因此采用SGI的STLport。刚才去掉注释的目的是屏蔽MSVC6.0的iostream)。最后打开OSG关于VC6.0的工程文件VisualStudio.dsw(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/VisualStudio/VisualStudio.dsw),在Tools —〉Options    —〉Directories    —〉Directories:中添加一项C:/Program Files/Microsoft Visual Studio/VC98/STLport-4.6.2/stlport,并将其置于第一的位置。

步骤3:编译OSG的OpenThreads。打开OpenThreads的工程文件(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenThreads-v1.2dev3-osg0.9.6/win32_src/OpenThreads.dsw)。将该工程文件下的win32thread.cpp中第26行的using std::size_t;注释掉,编译链接(batch build),在OpenThreads的bin目录下生成2个dll文件OpenThreadsWin32d.dll和OpenThreadsWin32.dll,同时在OpenThreads的libWin32目录下(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenThreads-v1.2dev3-osg0.9.6/lib/Win32)生成2个lib文件,OpenThreadsWin32d.lib,OpenThreadsWin32.lib。

步骤4: 编译OSG的Producer。打开Producer的工程文件Producer.dsw(如E:OSGOSG_OP_OT-0.9.6-2Producer-0.8.4-2VC++6.0Producer.dsw),做如下设置:

       在Project —〉Settings    —〉C/C++    —〉Category选项下拉菜单里选择“Preprocessor”,在Additional include directories添加:E:/OSG/OSG_OP_OT-0.9.6-2OpenThreads-v1.2dev3-osg0.9.6/include

        在Project —〉Settings    —〉Link    —〉Category 下拉菜单选择”Input”,在 Additional library path: 添加E:/OSG/OSG_OP_OT-0.9.6-2/OpenThreads-v1.2dev3-osg0.9.6/lib/Win32 注意在release和debug中都要作上述设置,然后编译链接(batch build),得到和OpenThreads相似的结果。

步骤5: 从属文件的拷贝:将3rdParty_2003-10-01include下的所有文件拷贝至整体程序的头文件目录下(如E:/OSGOSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/include);将3rdParty_2003-10-01lib下的所有文件拷贝至整体程序的lib库中(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/lib)。

步骤6: 整体程序的编译链接。首先将OpenThreads和Producer的头文件目录带文件(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenThreads-v1.2dev3-osg0.9.6/include下的OpenThreads文件夹和E:/OSG/OSG_OP_OT-0.9.6-2/Producer-0.8.4-2/include下的Producer文件夹)一起拷贝到整体程序的头文件库(E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/include)中。然后将2、3步生成的OpenThreadsWin32d.lib、OpenThreadsWin32.lib和Producerd.lib、Producer.lib拷贝至OSG的lib目录下(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/lib)。再将2、3步生成的OpenThreadsWin32d.dll、OpenThreadsWin32.dll和Producerd.dll、Producer.dll拷贝到OSG的bin目录下(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/bin)。打开OSG关于VC6.0的工程文件VisualStudio.dsw(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/VisualStudio/VisualStudio.dsw)。在E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/examples/slideshow3d/Readerwriterxml.cpp中将所有xmlChildrenNode替换为 children。编译链接整个OSG程序(batch build)。这个时间非常漫长在整个过程中我只有osgscalarbar.exe和osgdb_objd.dll在生成时出错。成功之后就可以在bin目录(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/bin)和lib目录(如E:/OSG/OSG_OP_OT-0.9.6-2/OpenSceneGraph-0.9.6-2/lib)看到很多生成的dll和lib文件了。


该用户从未签到

 楼主| 发表于 2008-4-19 00:13:47 | 显示全部楼层
好长的文章

该用户从未签到

 楼主| 发表于 2008-4-19 00:17:28 | 显示全部楼层
我安装了,并且按照它上面说的,把一段宏重新定义了,但是STLport的文件包错说,好像是多线程的问题

该用户从未签到

发表于 2008-4-19 10:10:19 | 显示全部楼层
估计是你的STLport库配置有问题,还是就是用一个新的STLport库吧,毕竟这篇文档是好久以前的了~~~~~~~~~~~~

该用户从未签到

 楼主| 发表于 2008-4-19 12:25:03 | 显示全部楼层
http://www.openscenegraph.org/os ... cifics/VisualStudio

上面那个连接实在群里面问到的,说的是怎么在Vc6.0下编译的,大概意思是这样的么?

1 下载STLport4.5,放在VC的Include的目录下
2 把其中 stl_user_config.h 45行 # define _STLP_NO_OWN_IOSTREAMS 1 的 1改成  _IN_
   (是这样吗,帮忙看看英文)
3    把STLport的系统目录顶置最上

可是这样做了之后,v6告诉我出错了,单线程多线程的问题

stl\_site_config.h(41) : fatal error C1189: #error :  "Only multi-threaded runtime library may be linked with STLport!"
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-4-19 13:27:58 | 显示全部楼层
    在这里也有文章的,:http://www.osgchina.org/projects ... cn/VisualStudio.php

    只是你为什么非要用6.0呢,非常不解,现在除了极罕见的工业要求之外,没有人会用6.0的,还有就是转专业的研究生编程喜欢用6.0,还有就是从TC走过来的博导,别的真没有了,在公司里是没有6.0的,建议换VS系列吧,这样以后各版本都省事多了,,,,,,,,,,,,OSG越来越新,对VC低版本的支持会越来越差的

    该用户从未签到

    发表于 2008-4-19 14:42:41 | 显示全部楼层
    原帖由 小艾久久 于 2008-4-19 12:25 发表
    http://www.openscenegraph.org/os ... cifics/VisualStudio

    上面那个连接实在群里面问到的,说的是怎么在Vc6.0下编译的,大概意思是这样的么?

    1 下载STLport4.5,放在VC的Include的目 ...


    试一试在C/C++的命令行参数里加上/MDD或/MD,也就是设置工程的Run-Time Library

    该用户从未签到

    发表于 2008-4-19 14:47:38 | 显示全部楼层
    原帖由 FreeSouth 于 2008-4-19 13:27 发表
    在这里也有文章的,:http://www.osgchina.org/projects ... cn/VisualStudio.php

    只是你为什么非要用6.0呢,非常不解,现在除了极罕见的工业要求之外,没有人会用6.0的,还有就是 ...


    VS主要是有一个超级方便的IDE环境,再加上第三方的Visual Assist工具,编程简直就像打游戏一样舒服……除此之外,对其编译器的诟病好像一直就没断过~~
    其实我最热爱的工具就是Visual Assist了,还有用来做内存泄漏检查的Bounder Checker~~不然早就换用Dev-Cpp了
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-4-19 19:47:05 | 显示全部楼层
    原帖由 array 于 2008-4-19 14:47 发表


    VS主要是有一个超级方便的IDE环境,再加上第三方的Visual Assist工具,编程简直就像打游戏一样舒服……除此之外,对其编译器的诟病好像一直就没断过~~
    其实我最热爱的工具就是Visual Assist了,还有用来做内存泄 ...


    哈哈
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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