查看: 2335|回复: 17

OSG中例子 拖拽器的编译出现无法解析的问题,动态文件都有

[复制链接]

该用户从未签到

发表于 2012-9-10 21:03:29 | 显示全部楼层 |阅读模式
#include <osgManipulator/CommandManager>
#include <osgManipulator/TranslateAxisDragger>
#include <osgDB/ReadFile>
#include<osgGA/GUIEventHandler>
#include <osgViewer/Viewer>

class PickModelHandler : public osgGA::GUIEventHandler
{
public:
    PickModelHandler() : _activeDragger(0) {}
   
    bool handle( const osgGA::GUIEventAdapter& ea,
                                                osgGA::GUIActionAdapter& aa,
                                                osg::Object*, osg::NodeVisitor* )
    {
        osgViewer::View* view = dynamic_cast<osgViewer::View*>( &aa );
        if ( !view ) return false;
        
        if ( (ea.getModKeyMask()&osgGA::GUIEventAdapter::MODKEY_SHIFT)==0 )
            return false;
        
        switch ( ea.getEventType() )
        {
            case osgGA::GUIEventAdapter:USH:
            {
                _pointer.reset();
               
                osgUtil:ineSegmentIntersector::Intersections intersections;
                if ( view->computeIntersections(ea.getX(), ea.getY(), intersections) )
                {
                    _pointer.setCamera( view->getCamera() );
                    _pointer.setMousePosition( ea.getX(), ea.getY() );
                    
                    for ( osgUtil::LineSegmentIntersector::Intersections::iterator hitr=intersections.begin();
                          hitr != intersections.end(); ++hitr)
                    {
                        _pointer.addIntersection( hitr->nodePath, hitr->getLocalIntersectPoint() );
                    }
                    
                    for ( osg::NodePath::iterator itr=_pointer._hitList.front().first.begin();
                          itr != _pointer._hitList.front().first.end(); ++itr )
                    {
                        osgManipulator:ragger* dragger = dynamic_cast<osgManipulator::Dragger*>( *itr );
                        if ( dragger )
                        {
                            dragger->handle( _pointer, ea, aa );
                            _activeDragger = dragger;
                            break;
                        }                  
                    }
                }
                break;
            }
            
            case osgGA::GUIEventAdapter::DRAG:
            case osgGA::GUIEventAdapter::RELEASE:
            {
                if ( _activeDragger )
                {
                    _pointer._hitIter = _pointer._hitList.begin();
                    _pointer.setCamera( view->getCamera() );
                    _pointer.setMousePosition( ea.getX(), ea.getY() );
                    
                    _activeDragger->handle( _pointer, ea, aa );
                }
               
                if ( ea.getEventType()==osgGA::GUIEventAdapter::RELEASE )
                {
                    _activeDragger = NULL;
                    _pointer.reset();
                }
                break;
            }
            
            default:
                break;
        }
        return true;
    }

protected:
    osgManipulator::Dragger* _activeDragger;
    osgManipulator::PointerInfo _pointer;
};

int main( int argc, char** argv )
{
    osg::ArgumentParser arguments( &argc, argv );
    osg::Node* model = osgDB::readNodeFiles( arguments );
    if ( !model ) model = osgDB::readNodeFile( "cow.osg" );
   
    osg::ref_ptr<osgManipulator::Selection> selection = new osgManipulator::Selection;
    selection->addChild( model );
   
    float scale = model->getBound().radius() * 1.6;
    osg::ref_ptr<osgManipulator::TranslateAxisDragger> dragger = new osgManipulator::TranslateAxisDragger;
    dragger->setupDefaultGeometry();
    dragger->setMatrix( osg::Matrix::scale(scale, scale, scale) *
                        osg::Matrix::translate(model->getBound().center()) );
   
    osg::ref_ptr<osg::Group> root = new osg::Group;
    root->addChild( dragger.get() );
    root->addChild( selection.get() );
    root->addChild( osgDB::readNodeFile("axes.osg") );
   
    osg::ref_ptr<osgManipulator::CommandManager> manager = new osgManipulator::CommandManager;
    manager->connect( *dragger, *selection );
   
    osgViewer::Viewer viewer;
    viewer.addEventHandler( new PickModelHandler );
    viewer.setSceneData( root.get() );
    return viewer.run();
}

该用户从未签到

发表于 2012-9-10 21:43:52 | 显示全部楼层
怎么不贴问题出来呢

该用户从未签到

发表于 2012-9-11 07:47:48 | 显示全部楼层
又是一个让猜的

该用户从未签到

 楼主| 发表于 2012-9-11 12:08:28 | 显示全部楼层
问题在标题里没说清楚,不好意思啊。
问题是这样的,编译后出现无法解析的问题,应该不会是动态链接的问题osgmanipulator的文件我找到了,
main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall osgManipulator::TranslateAxisDragger::TranslateAxisDragger(void)" (__imp_??0TranslateAxisDragger@osgManipulator@@QAE@XZ),该符号在函数 _main 中被引用
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual class osg::Object * __thiscall osgManipulator::TranslateAxisDragger::cloneType(void)const " (?cloneType@TranslateAxisDragger@osgManipulator@@UBEPAVObject@osg@@XZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual class osg::Object * __thiscall osgManipulator::CompositeDragger::clone(class osg::CopyOp const &)const " (?clone@CompositeDragger@osgManipulator@@UBEPAVObject@osg@@ABVCopyOp@4@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall osgManipulator::TranslateAxisDragger::isSameKindAs(class osg::Object const *)const " (?isSameKindAs@TranslateAxisDragger@osgManipulator@@UBE_NPBVObject@osg@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual char const * __thiscall osgManipulator::TranslateAxisDragger::libraryName(void)const " (?libraryName@TranslateAxisDragger@osgManipulator@@UBEPBDXZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual char const * __thiscall osgManipulator::TranslateAxisDragger::className(void)const " (?className@TranslateAxisDragger@osgManipulator@@UBEPBDXZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall osgManipulator::CompositeDragger::accept(class osg::NodeVisitor &)" (?accept@CompositeDragger@osgManipulator@@UAEXAAVNodeVisitor@osg@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall osgManipulator:ragger::traverse(class osg::NodeVisitor &)" (?traverse@Dragger@osgManipulator@@UAEXAAVNodeVisitor@osg@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall osgManipulator::CompositeDragger::setParentDragger(class osgManipulator::Dragger *)" (?setParentDragger@CompositeDragger@osgManipulator@@UAEXPAVDragger@2@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual class osgManipulator::CompositeDragger * __thiscall osgManipulator::CompositeDragger::getComposite(void)" (?getComposite@CompositeDragger@osgManipulator@@UAEPAV12@XZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual class osgManipulator::CompositeDragger const * __thiscall osgManipulator::CompositeDragger::getComposite(void)const " (?getComposite@CompositeDragger@osgManipulator@@UBEPBV12@XZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall osgManipulator::CompositeDragger::handle(class osgManipulator:ointerInfo const &,class osgGA::GUIEventAdapter const &,class osgGA::GUIActionAdapter &)" (?handle@CompositeDragger@osgManipulator@@UAE_NABVPointerInfo@2@ABVGUIEventAdapter@osgGA@@AAVGUIActionAdapter@5@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall osgManipulator::Dragger::handle(class osgGA::GUIEventAdapter const &,class osgGA::GUIActionAdapter &)" (?handle@Dragger@osgManipulator@@UAE_NABVGUIEventAdapter@osgGA@@AAVGUIActionAdapter@4@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall osgManipulator::TranslateAxisDragger::setupDefaultGeometry(void)" (?setupDefaultGeometry@TranslateAxisDragger@osgManipulator@@UAEXXZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall osgManipulator::Dragger::receive(class osgManipulator::MotionCommand const &)" (?receive@Dragger@osgManipulator@@UAE_NABVMotionCommand@2@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall osgManipulator::CompositeDragger::addDragger(class osgManipulator::Dragger *)" (?addDragger@CompositeDragger@osgManipulator@@UAE_NPAVDragger@2@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall osgManipulator::CompositeDragger::removeDragger(class osgManipulator::Dragger *)" (?removeDragger@CompositeDragger@osgManipulator@@UAE_NPAVDragger@2@@Z)
1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall osgManipulator::Dragger::addTransformUpdating(class osg::MatrixTransform *)" (__imp_?addTransformUpdating@Dragger@osgManipulator@@QAEXPAVMatrixTransform@osg@@@Z),该符号在函数 "public: bool __thiscall osgManipulator::CommandManager::connect(class osgManipulator::Dragger &,class osg::MatrixTransform &)" (?connect@CommandManager@osgManipulator@@QAE_NAAVDragger@2@AAVMatrixTransform@osg@@@Z) 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) protected: virtual __thiscall osgManipulator::TranslateAxisDragger::~TranslateAxisDragger(void)" (__imp_??1TranslateAxisDragger@osgManipulator@@MAE@XZ),该符号在函数 "protected: virtual void * __thiscall osgManipulator::TranslateAxisDragger::`scalar deleting destructor'(unsigned int)" (??_GTranslateAxisDragger@osgManipulator@@MAEPAXI@Z) 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall osgManipulator::PointerInfo::PointerInfo(void)" (__imp_??0PointerInfo@osgManipulator@@QAE@XZ),该符号在函数 "public: __thiscall PickModelHandler::PickModelHandler(void)" (??0PickModelHandler@@QAE@XZ) 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall osgManipulator::PointerInfo::addIntersection(class std::vector<class osg::Node *,class std::allocator<class osg::Node *> > const &,class osg::Vec3d const &)" (__imp_?addIntersection@PointerInfo@osgManipulator@@QAEXABV?$vector@PAVNode@osg@@V?$allocator@PAVNode@osg@@@std@@@std@@ABVVec3d@osg@@@Z),该符号在函数 "public: virtual bool __thiscall PickModelHandler::handle(class osgGA::GUIEventAdapter const &,class osgGA::GUIActionAdapter &,class osg::Object *,class osg::NodeVisitor *)" (?handle@PickModelHandler@@UAE_NABVGUIEventAdapter@osgGA@@AAVGUIActionAdapter@3@PAVObject@osg@@PAVNodeVisitor@6@@Z) 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall osgManipulator::PointerInfo::setMousePosition(float,float)" (__imp_?setMousePosition@PointerInfo@osgManipulator@@QAEXMM@Z),该符号在函数 "public: virtual bool __thiscall PickModelHandler::handle(class osgGA::GUIEventAdapter const &,class osgGA::GUIActionAdapter &,class osg::Object *,class osg::NodeVisitor *)" (?handle@PickModelHandler@@UAE_NABVGUIEventAdapter@osgGA@@AAVGUIActionAdapter@3@PAVObject@osg@@PAVNodeVisitor@6@@Z) 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall osgManipulator::PointerInfo::setCamera(class osg::Camera *)" (__imp_?setCamera@PointerInfo@osgManipulator@@QAEXPAVCamera@osg@@@Z),该符号在函数 "public: virtual bool __thiscall PickModelHandler::handle(class osgGA::GUIEventAdapter const &,class osgGA::GUIActionAdapter &,class osg::Object *,class osg::NodeVisitor *)" (?handle@PickModelHandler@@UAE_NABVGUIEventAdapter@osgGA@@AAVGUIActionAdapter@3@PAVObject@osg@@PAVNodeVisitor@6@@Z) 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall osgManipulator::PointerInfo::reset(void)" (__imp_?reset@PointerInfo@osgManipulator@@QAEXXZ),该符号在函数 "public: virtual bool __thiscall PickModelHandler::handle(class osgGA::GUIEventAdapter const &,class osgGA::GUIActionAdapter &,class osg::Object *,class osg::NodeVisitor *)" (?handle@PickModelHandler@@UAE_NABVGUIEventAdapter@osgGA@@AAVGUIActionAdapter@3@PAVObject@osg@@PAVNodeVisitor@6@@Z) 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall osgManipulator::PointerInfo::~PointerInfo(void)" (__imp_??1PointerInfo@osgManipulator@@QAE@XZ),该符号在函数 "public: virtual __thiscall PickModelHandler::~PickModelHandler(void)" (??1PickModelHandler@@UAE@XZ) 中被引用
1>F:\OSG\dragger\Debug\dragger.exe : fatal error LNK1120: 25 个无法解析的外部命令


如果能告诉我怎么看着问题就好了,授之以渔么。

该用户从未签到

发表于 2012-9-11 14:32:49 | 显示全部楼层
没链接这个  osgManipulator.lib

该用户从未签到

发表于 2012-9-11 20:14:09 | 显示全部楼层
。。。配置。。。VC++目录。。。C++链接器输入。。。两个都要设置。貌似新手都会遇到这样的问题。

该用户从未签到

 楼主| 发表于 2012-9-14 22:25:24 | 显示全部楼层
StackSnow 发表于 2012-9-11 14:32
没链接这个  osgManipulator.lib

这些文件我有

该用户从未签到

 楼主| 发表于 2012-9-14 22:26:28 | 显示全部楼层
starmessage 发表于 2012-9-11 20:14
。。。配置。。。VC++目录。。。C++链接器输入。。。两个都要设置。貌似新手都会遇到这样的问题。

这些我也设置好了,其他的OSG程序能运行,应该不是这问题。

该用户从未签到

发表于 2012-9-15 20:47:55 | 显示全部楼层
tnb1992 发表于 2012-9-14 22:26
这些我也设置好了,其他的OSG程序能运行,应该不是这问题。

我每次遇到这个调调就好了,有时是没输入一个,有时是字母输错了,有时是输出的debug和release没相应对上,总之就是配置问题,你运行的OSG源程序是从VS2010中生成还是程序。。你好好检查下吧。
有图有真相,上图能证明,无图不解释。

该用户从未签到

发表于 2012-9-16 09:41:02 | 显示全部楼层

该用户从未签到

 楼主| 发表于 2012-9-19 17:29:09 | 显示全部楼层
starmessage 发表于 2012-9-15 20:47
我每次遇到这个调调就好了,有时是没输入一个,有时是字母输错了,有时是输出的debug和release没相应对上 ...

这类的问题我以前犯过,也解决了。我在C盘的osg文件夹里找到了你说的这些文件, 没上传图片是因为图片上传不成功。可能是其他的问题么???

该用户从未签到

 楼主| 发表于 2012-9-19 17:32:01 | 显示全部楼层
StackSnow 发表于 2012-9-16 09:41

求大婶解答疑问啊。请不吝赐教,十分感激。

该用户从未签到

发表于 2012-9-19 17:54:43 | 显示全部楼层
tnb1992 发表于 2012-9-19 17:32
求大婶解答疑问啊。请不吝赐教,十分感激。

就是 没链接这个  osgManipulator.lib

你仔细检查一下吧

该用户从未签到

发表于 2012-9-19 20:33:44 | 显示全部楼层
找到osgManipulator.lib,可以先放到工程目录下和Debug目录下试试,如果好的话,再在VC++的“工具”->"选项“中配置“VC++目录”中的“库文件”一项中添加OSG的lib路径。

该用户从未签到

 楼主| 发表于 2012-9-20 22:15:13 | 显示全部楼层
StackSnow 发表于 2012-9-19 17:54
就是 没链接这个  osgManipulator.lib

你仔细检查一下吧

捕获.PNG 有图有真相

该用户从未签到

 楼主| 发表于 2012-9-20 22:24:07 | 显示全部楼层
xulin_2005 发表于 2012-9-19 20:33
找到osgManipulator.lib,可以先放到工程目录下和Debug目录下试试,如果好的话,再在VC++的“工具”->"选项 ...

捕获.PNG 工程里面的属性都配好了

该用户从未签到

发表于 2012-9-21 08:34:25 | 显示全部楼层
tnb1992 发表于 2012-9-20 22:24
工程里面的属性都配好了

你只添加了路径,不进行连接也没用啊

该用户从未签到

发表于 2012-9-21 09:24:46 | 显示全部楼层
基础知识不扎实
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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