查看: 3230|回复: 7

关于《OSG三维渲染引擎编程指南》例子编译通不过问题请教???

[复制链接]

该用户从未签到

发表于 2010-3-24 11:14:44 | 显示全部楼层 |阅读模式
#include <osgViewer/Viewer>
#include <osg/Node>
#include <osg/Geode>
#include <osg/Group>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osgUtil/Optimizer>
int main()
{
       osg::ref_ptr<osgViewer::View> viewer=new   osgViewer::View();
       osg::ref_ptr<osg::Group>  root=new osg::Group();
       osg::ref_ptr<osg::Node> node=osgDB::readNodeFile("cow.osg");
       root->addChild(node.get());
       osgUtil::Optimizer optimizer;
       optimizer.optimize(root.get());
       viewer->setSceneData(root.get());
       viewer->realize(); ////////////VS编译错误,realize不是osgViewer::View的成员函数
       viewer->run();////////////////VS编译错误,run不是osgViewer::View的成员函数

       return 0;
}
/////////////////////////////////////
前几天买了一本书,配置环境用了几天没成功。实在没办法了,在此恳请大侠帮忙。
刚开始按书上说的安装OSG,然后配置......等等。配置完成之后,编译一个小程序试试,上面的代码是书上的例题,编译错误如上面注释的。然而在我打开例子里面的程序发现例子里面realize(),run()两个函数,而且编译通过,这我就纳闷了,为什么我的就编译通不过呢???请教高数指点,菜鸟不胜感激。

该用户从未签到

发表于 2010-3-24 12:36:54 | 显示全部楼层
osg::ref_ptr<osgViewer::View>

很显然这里应当是osgViewer::Viewer,不过我并不清楚这是作者的笔误还是您抄错了

该用户从未签到

 楼主| 发表于 2010-3-24 13:20:36 | 显示全部楼层
真是丢人~~~果然是我自己写错了。
不过array,我还有一个问题就是在我编译 osgSim的时间,编译器提示找不到osgUtil.lib, 我一看原来osgSim在osgUtil前面,这样我就先编译osgUtil然后再编译osgSim这样就通过了。我想问的是osg库是不是都是相互联系的?还有就是有两个库A.lib,B.lib。库A里面需要调用库B的函数,而库B里面也有需要调用库A的函数,那么这样的话,应该怎么样编译动态链接库呢?

该用户从未签到

发表于 2010-3-24 14:13:18 | 显示全部楼层
有两个库A.lib,B.lib。库A里面需要调用库B的函数,而库B里面也有需要调用库A的函数
不存在这样的情形,这样的库不可能编译过去~~

OSG的基本库是OpenThreads.lib,osg.lib,osgDB.lib和osgUTil.lib。其他库统称为NodeKits,它们依赖于基本库,并且存在依赖于另一个NodeKits的可能。但是不会出现这种交叉依赖的情形

该用户从未签到

 楼主| 发表于 2010-3-24 15:07:54 | 显示全部楼层
原来是这样啊,明白了。谢谢....。

该用户从未签到

发表于 2010-4-26 13:02:21 | 显示全部楼层
书中的Main.cpp中要加#include "stdafx.h"吗?不加编译通不过,说可能少了这个头文件;加了出现1>LINK : warning LNK4067: 不明确的入口点;选定“mainCRTStartup”
1>main.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall osg::Group::Group(void)" (__imp_??0Group@osg@@QAE@XZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) protected: virtual __thiscall osg::Group::~Group(void)" (__imp_??1Group@osg@@MAE@XZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall osgViewer::Viewer::Viewer(void)" (__imp_??0Viewer@osgViewer@@QAE@XZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: static class osgDB::Registry * __cdecl osgDB::Registry::instance(bool)" (__imp_?instance@Registry@osgDB@@SAPAV12@_N@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) class osg::Node * __cdecl osgDB::readNodeFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class osgDB::ReaderWriter::Options const *)" (__imp_?readNodeFile@osgDB@@YAPAVNode@osg@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PBVOptions@ReaderWriter@1@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall osgUtil::Optimizer:ptimize(class osg::Node *)" (__imp_?optimize@Optimizer@osgUtil@@QAEXPAVNode@osg@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: virtual void __thiscall osg::Referenced::setThreadSafeRefUnref(bool)" (__imp_?setThreadSafeRefUnref@Referenced@osg@@UAEX_N@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: virtual void __thiscall osg::Node::ascend(class osg::NodeVisitor &)" (__imp_?ascend@Node@osg@@UAEXAAVNodeVisitor@2@@Z)

这是什么原因啊?麻烦了啊,刚开始学。

该用户从未签到

发表于 2010-4-26 13:40:27 | 显示全部楼层
您是否设置了正确的工程依赖库文件?

该用户从未签到

发表于 2010-4-26 18:58:40 | 显示全部楼层
看到您的标题被吓了一跳,,书中的所有示例都测试过,,都可以正确编译,只要你有正确的OSG环境~~~请您按照书的步骤,一步步慢慢来,这些基本的东西第一章都讲得很清楚,请您能够仔细阅读~~~~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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