查看: 3847|回复: 20

第一次用OSG,用教程里的方法CMAKE报错

[复制链接]

该用户从未签到

发表于 2009-1-16 10:49:56 | 显示全部楼层 |阅读模式
第一次用OSG,所以问题多多,希望大家能帮下忙
系统是XP SP2,OSG2.7.8,原来一直用VC6.0,因为STL问题又装了VS2008。按照http://bbs.osgchina.org/viewthread.php?tid=94这里的教程,开始CMAKE可以运行,但是在VS2008里打开生成的dsw后build all,中间出错。把VC6.0和CMAKE卸载,重装CMAKE,出现CMAKE无法运行的问题,说C编译器不能编译简单的测试程序

好多教程帖子里都用VS2003/2005,是否2008和这2个版本在设置上差别很大?此外,我VS2008装在D盘应该没问题吧

[ 本帖最后由 nocturne 于 2009-1-16 10:59 编辑 ]
CMAKE.jpg

该用户从未签到

发表于 2009-1-16 11:02:20 | 显示全部楼层
CMake认为您的VS2008有问题,因为它的自动测试程序无法编译通过,原因是rc.exe执行不正确。请检查您的VS2008的系统环境变量(PATH,LIB,INCLUDE)是否配置正确,VC的安装步骤是否正确。

该用户从未签到

 楼主| 发表于 2009-1-16 11:25:40 | 显示全部楼层
谢谢,我去试试看

该用户从未签到

 楼主| 发表于 2009-1-16 19:56:13 | 显示全部楼层
编译好了,有很多警告,说包含有无法表达的字符
还有5个错误 OSG.jpg

然后我生成Install工程,结果如图

[ 本帖最后由 nocturne 于 2009-1-16 19:58 编辑 ]
OSG2.jpg

该用户从未签到

发表于 2009-1-16 20:49:32 | 显示全部楼层
osgversion那个例子在VS下有部分字符不能识别,可以把整个例子都注释掉,它的作用是显示早期的贡献者名单以及一些技术支持信息。
其他有错的程序是哪些?错误提示是什么?从您的附图里我看不出端倪来
不过这些错误通常已经不会影响您的使用了,只要核心库的内容都编译正确就可以了

该用户从未签到

 楼主| 发表于 2009-1-16 21:17:54 | 显示全部楼层
意思是说,不用改动这个osgversion.cpp完全不影响使用?
还有这些错误也对一般使用没有影响?

那接下来是否要设置系统环境变量?第一次接触OSG,很是茫然啊

该用户从未签到

 楼主| 发表于 2009-1-16 22:45:53 | 显示全部楼层
按照您的说法,重新编译。但是结果和PDF教程里的编译后再install的一样,一会就结束了,而不是原来花费几个小时的编译。
我还是删除从头开始吧

该用户从未签到

发表于 2009-1-17 00:11:15 | 显示全部楼层
我没太明白您所说的“一会就结束了,而不是原来花费几个小时的编译”?

删除从头开始是一项耗费时间而且不能从本质上解决问题的工作。为何不尝试着找出编译错误的原因,并自行改正过来呢?OSG的有些例子在Windows下就是存在错误需要手动改正,这个重新编译也不能避免

该用户从未签到

 楼主| 发表于 2009-1-17 13:57:01 | 显示全部楼层
原帖由 array 于 2009-1-17 00:11 发表
我没太明白您所说的“一会就结束了,而不是原来花费几个小时的编译”?

删除从头开始是一项耗费时间而且不能从本质上解决问题的工作。为何不尝试着找出编译错误的原因,并自行改正过来呢?OSG的有些例子在Windows下就是存在错误需要手动改正,这个重新编译也不能避免


群里面您说把osgversion.cpp里面的问号改成双引号,然后重新编译,但是有问题,我就电脑开了通宵从CMAKE开始,再重新编译
是否这些错误的问题?
OSG.jpg

该用户从未签到

 楼主| 发表于 2009-1-17 14:00:21 | 显示全部楼层
QQ文件中转站有人上传了自己编译后的文件,我能否直接用?
XP SP3 VS2008SP1的
就系统有点差别,我是SP2的

该用户从未签到

发表于 2009-1-17 14:32:32 | 显示全部楼层
您应该看一看是哪些工程编译失败了,看看失败的信息,并自己判断或者求助解决的方法。您提供的图片里仅仅指名是7个工程编译失败了,但是我无法得知是哪7个(OSG核心库附带的工程有上百个,但大部分是插件和例子程序),而且osgversion仅仅是其中的一个工程,其他诸如osgviewerFLTK等都可能在Windows下面编译失败,手动稍稍一改就可以解决,完全不必重新编译。

您可以直接使用中转站的预编译文件,只要VS的版本一致就可以;但通常来说您自己编译得到的是最适合您的计算机使用的版本,您已经自己编译得到了可用的OSG动态链接库文件,7个错误可能只是某些插件或者例子程序的错误,事实上它们完全不会影响您的使用。

该用户从未签到

 楼主| 发表于 2009-1-17 15:23:54 | 显示全部楼层
我把错误都列出来
在osgversion处有多处error,
还有:
D:\VS2008\VC\include\vector(46) : fatal error C1088: Cannot flush compiler intermediate file: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\_CL_3cdbe4e8db': No space left on device
Generating Code...
Compiling...
Canvas.cpp
Generating Code...
Build log was saved at "file://d:\OpenSceneGraph-2.7.8\OpenSceneGraph-2.7.8\src\osgWrappers\osgwrapper_osgWidget.dir\Release\BuildLog.htm"
Wrapper osgWidget - 1 error(s), 0 warning(s)
================================
D:\OpenSceneGraph-2.7.8\OpenSceneGraph-2.7.8\include\osgDB/DatabasePager(126) : fatal error C1088: Cannot flush compiler intermediate file: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\_CL_2afb7576ex': No space left on device
Generating Code...
Build log was saved at "file://d:\OpenSceneGraph-2.7.8\OpenSceneGraph-2.7.8\src\osgWrappers\osgwrapper_osgViewer.dir\Release\BuildLog.htm"
Wrapper osgViewer - 1 error(s), 0 warning(s)
=================================
Terrain.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall osgTerrain::Terrain::setTerrainTechniquePrototype(class osgTerrain::TerrainTechnique *)" (__imp_?setTerrainTechniquePrototype@Terrain@osgTerrain@@QAEXPAVTerrainTechnique@2@@Z) referenced in function "public: __thiscall `anonymous namespace'::reflector28::reflector28(void)" (??0reflector28@?A0x86b79274@@QAE@XZ)
D:\OpenSceneGraph-2.7.8\OpenSceneGraph-2.7.8\bin\Release\..\..\bin\osgPlugins-2.7.8\osgwrapper_osgTerrain.dll : fatal error LNK1120: 1 unresolved externals
Build log was saved at "file://d:\OpenSceneGraph-2.7.8\OpenSceneGraph-2.7.8\src\osgWrappers\osgwrapper_osgTerrain.dir\Release\BuildLog.htm"
Wrapper osgTerrain - 2 error(s), 0 warning(s)
=================================
Terrain.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall osgTerrain::Terrain::setTerrainTechniquePrototype(class osgTerrain::TerrainTechnique *)" (__imp_?setTerrainTechniquePrototype@Terrain@osgTerrain@@QAEXPAVTerrainTechnique@2@@Z) referenced in function "public: __thiscall `anonymous namespace'::reflector28::reflector28(void)" (??0reflector28@?A0x86b79274@@QAE@XZ)
D:\OpenSceneGraph-2.7.8\OpenSceneGraph-2.7.8\bin\Debug\..\..\bin\osgPlugins-2.7.8\osgwrapper_osgTerraind.dll : fatal error LNK1120: 1 unresolved externals
Build log was saved at "file://d:\OpenSceneGraph-2.7.8\OpenSceneGraph-2.7.8\src\osgWrappers\osgwrapper_osgTerrain.dir\Debug\BuildLog.htm"
Wrapper osgTerrain - 2 error(s), 0 warning(s)
===============================
D:\VS2008\VC\include\vector(46) : fatal error C1088: Cannot flush compiler intermediate file: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\_CL_afffa4f5db': No space left on device
Text.cpp
D:\VS2008\VC\include\vector(46) : fatal error C1088: Cannot flush compiler intermediate file: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\_CL_ee366aa1db': No space left on device
===============================
D:\VS2008\VC\include\vector(997) : fatal error C1088: Cannot flush compiler intermediate file: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\_CL_e2cdd138db': No space left on device
PrimitiveSet.cpp
D:\VS2008\VC\include\vector(997) : fatal error C1088: Cannot flush compiler intermediate file: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\_CL_458f33aedb': No space left on device
Generating Code...
===============================
D:\VS2008\VC\include\xutility(2448) : fatal error C1088: Cannot flush compiler intermediate file: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\_CL_1d82760eex': No space left on device
==============================
D:\OpenSceneGraph-2.7.8\OpenSceneGraph-2.7.8\include\osg/Vec4s(90) : fatal error C1088: Cannot flush compiler intermediate file: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\_CL_f1bed0d6ex': No space left on device
ClipPlane.cpp
D:\OpenSceneGraph-2.7.8\OpenSceneGraph-2.7.8\include\osg/Vec2s(69) : fatal error C1088: Cannot flush compiler intermediate file: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\_CL_f5084845ex': No space left on device

Plugins ive - 9 error(s), 0 warning(s)
==============================

=============================
还有一些警告,比如
D:\OpenSceneGraph-2.7.8\OpenSceneGraph-2.7.8\include\osgIntrospection/Value(357) : warning C4180: qualifier applied to function type has no meaning; ignored
OSGERROR.jpg

这些错误和警告,哪些是必须要处理的?

[ 本帖最后由 nocturne 于 2009-1-17 15:28 编辑 ]

该用户从未签到

发表于 2009-1-17 15:32:44 | 显示全部楼层
简单地翻译一下英文:您的C盘没有地方了,所以VC编译的缓存文件没办法生成,先清理一下磁盘吧。

还有如果您不打算使用其他语言,例如Java等,来结合OSG的话,就不需要编译wrapper库(BUILD_OSG_WRAPPERS设置为OFF),这样就可以避免wrapper_osgTerrain的那个错误了。

所有的警告都不用管,编译器之间的差异造成的,通常不会有什么影响。

osgversion那个您要注意C++的语法,并不是把所有的 ? 都替换成 " ,而是把Windows系统不能识别的字符简单地屏蔽掉而已。相信您是可以自己判断出来的。此外这个例子本身基本上没有用处,直接注释掉也没有任何问题

该用户从未签到

 楼主| 发表于 2009-1-17 15:41:32 | 显示全部楼层
晕……原来是C盘空间的问题。我去腾空间,关闭wrappers。然后再重新编译?

osgversion我只是把前面的?替换成了“,后面语法中的没变

该用户从未签到

发表于 2009-1-17 16:07:48 | 显示全部楼层
不是简单地替换?为" ,而是在类似以下的情形中:
  1. printf( "什么?OSG中文网站" );
复制代码
因为Windows对编码格式的支持问题,导致成了:
  1. printf( "什么?OSG中文网? );
复制代码
很显然这样语法就错了,那么把第二个?改成",变成
  1. printf( "什么?OSG中文网" );
复制代码
虽然不符合原意,但至少可以保证语法正确。就是这个意思,但是决不是像机器人一样把所有的?都改掉,那样语法根本是错的。
也可以直接把这个例子注释掉,因为它对您自己的开发永远都不会有任何影响。

[ 本帖最后由 array 于 2009-1-17 16:10 编辑 ]

该用户从未签到

 楼主| 发表于 2009-1-17 17:17:02 | 显示全部楼层
现在看起来成功了,选择批生成里的Install然后生成,
========== Build: 2 succeeded, 0 failed, 388 up-to-date, 0 skipped ==========

本来share文件夹没有的,现在也有了

该用户从未签到

 楼主| 发表于 2009-1-17 19:11:07 | 显示全部楼层
命令行里运行osgversion正常,osglogo,osgview cow.osg都有问题
OSGCMD.jpg

该用户从未签到

 楼主| 发表于 2009-1-17 19:54:57 | 显示全部楼层
看了别人的教程,可能是OSG版本问题,目录都不一样
不知道接下来如何做了

该用户从未签到

发表于 2009-1-17 20:04:56 | 显示全部楼层
首先恭喜您,OSG已经编译和安装完成,下一步的开发已经没有软件上的问题了!

但是为什么您会认为“有问题”呢?

要运行一个Windows程序,首先要知道那个程序的位置。

您能够在那个C:\Document。。。目录下运行osgviewer,说明Windows系统知道了osgviewer.exe的位置。为什么呢?在当前这个目录下并没有这个文件啊——原因很简单,Windows通过搜索某些预设好的路径找到了这个文件,那么这些预设路径是在什么地方预设的呢?是在PATH系统环境变量里!!!

您在PATH环境变量中设置了OSG安装目录的bin路径,而这个路径下存在有osgviewer.exe,osgversion.exe,所以您可以在任何地方运行它们,但是这个目录下没有osglogo.exe,并且Windows在预设的路径中也找不到它,所以您不能运行。那么它在什么地方呢,在share目录下!share/OpenSceneGraph/bin路径中!这个目录在Windows预设的路径中吗?没有。需要把它设置进去吗?可以,但是毫无必要,只会增加系统的负担。

那么怎么运行它呢?再简单不过,进入到那个目录再运行就可以了。那么为什么osgviewer cow.osg没有效果呢?因为Windows找不到cow.osg这个文件在什么地方,您要做的只是去下载这个文件(http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-2.6/OpenSceneGraph-Data-2.6.0.zip),或者拿别的文件来做试验。

以上都是Windows系统操作的一些基本原理,和OSG没有直接关系,OSG方面的教程也无力把这所有无关又相关的知识(Windows系统操作,C++语法,OpenGL标准,抑或到电脑市场鉴别假显卡的手段)都面面俱到。教程和书籍,永远都只是您前进路上作为参考的一点工具而已;如果将其视为“老师”,它们就会摇身变成累赘。任何参考书都会过时,任何经典都有不成为经典的一天,只有您自己通过实践所得才是真理。期待您的自主学习所得,而非一味地看书和等待。

该用户从未签到

 楼主| 发表于 2009-1-17 21:04:39 | 显示全部楼层
非常感谢阿锐的解答
对于计算机编程我是半路出家,本身就是机械专业,好像您也是吧? 所以对于软件方面的知识比较薄弱
而已以前也一直用C来编写程序,C++可以说是空白,但是我知道OSG是基于C++的,所以暂时只是想能够运行OSG的DEMO,想初步了解OSG。
原先一直用VC6,突然便到VS2008摸索了好久,现在终于DEMO已经运行通过了,画面已经看到。不过按ESC推出后CMD窗口显示有问题 OSG~~.jpg
阿锐周末都来论坛答疑解惑,非常热心,对于像我这样的newbie来说是福音啊:)

[ 本帖最后由 nocturne 于 2009-1-17 21:09 编辑 ]

该用户从未签到

发表于 2009-1-17 21:22:04 | 显示全部楼层
没有太大的问题,不过您的显卡对OpenGL扩展的支持不够,所以才会提示那个错误,也许不少例子的效果都看不到了。

如果您的工程要用到OpenGL 2.0以上的各种强大功能的话,建议换一块好的nVIDIA显卡。

LinkVisitor那个是osgAnimation库的提示信息,这个库仍然在测试中,所以很多调试信息不会去掉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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