查看: 3654|回复: 20

我在编译的时候遇到无法解析的外部符号

[复制链接]

该用户从未签到

发表于 2013-5-6 09:03:24 | 显示全部楼层 |阅读模式
1>my viewer.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall osgViewer::Viewer::`vbase destructor'(void)" (__imp_??_DViewer@osgViewer@@QAEXXZ),该符号在函数 _main 中被引用
1>my viewer.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual int __thiscall osgViewer::Viewer::run(void)" (__imp_?run@Viewer@osgViewer@@UAEHXZ),该符号在函数 _main 中被引用
1>my viewer.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual void __thiscall osgViewer::Viewer::realize(void)" (__imp_?realize@Viewer@osgViewer@@UAEXXZ),该符号在函数 _main 中被引用
1>my viewer.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual void __thiscall osgViewer::Viewer::setSceneData(class osg::Node *)" (__imp_?setSceneData@Viewer@osgViewer@@UAEXPAVNode@osg@@@Z),该符号在函数 _main 中被引用
1>my viewer.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall osgViewer::Viewer::Viewer(void)" (__imp_??0Viewer@osgViewer@@QAE@XZ),该符号在函数 _main 中被引用
1>my viewer.obj : error LNK2019: 无法解析的外部符号 "__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::Options const *)" (__imp_?readNodeFile@osgDB@@YAPAVNode@osg@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PBVOptions@1@@Z),该符号在函数 "class osg::Node * __cdecl osgDB::readNodeFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?readNodeFile@osgDB@@YAPAVNode@osg@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 中被引用
1>my viewer.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class osgDB::Options * __thiscall osgDB::Registry::getOptions(void)" (__imp_?getOptions@Registry@osgDB@@QAEPAVOptions@2@XZ),该符号在函数 "class osg::Node * __cdecl osgDB::readNodeFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?readNodeFile@osgDB@@YAPAVNode@osg@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 中被引用
1>my viewer.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static class osgDB::Registry * __cdecl osgDB::Registry::instance(bool)" (__imp_?instance@Registry@osgDB@@SAPAV12@_N@Z),该符号在函数 "class osg::Node * __cdecl osgDB::readNodeFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?readNodeFile@osgDB@@YAPAVNode@osg@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 中被引用
1>D:\VS2010\projects\my test 1 viewer\Debug\my test 1 viewer.exe : fatal error LNK1120: 8 个无法解析的外部命令





请问这个该怎么解决?

该用户从未签到

发表于 2013-5-6 10:42:44 | 显示全部楼层
在连接器中 添加依赖库,osgviewer.lib, osgDB.lib

该用户从未签到

 楼主| 发表于 2013-5-6 10:57:32 | 显示全部楼层
CCCstudyer 发表于 2013-5-6 10:42
在连接器中 添加依赖库,osgviewer.lib, osgDB.lib

谢谢 解决了。   但是调试的时候又出现新的问题
“my test 1 viewer.exe”: 已加载“C:\Windows\SysWOW64\msvcr100d.dll”,已加载符号。
“my test 1 viewer.exe”: 已加载“C:\Windows\SysWOW64\imm32.dll”,Cannot find or open the PDB file
“my test 1 viewer.exe”: 已加载“C:\Windows\SysWOW64\msctf.dll”,Cannot find or open the PDB file
my test 1 viewer.exe 中的 0x762ec41f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0043f640 处的 std::bad_alloc。
my test 1 viewer.exe 中的 0x762ec41f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0043ef9c 处的 std::bad_alloc。
my test 1 viewer.exe 中的 0x762ec41f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x00000000 处的 [rethrow]。
my test 1 viewer.exe 中的 0x762ec41f 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0043ef9c 处的 std::bad_alloc。
my test 1 viewer.exe 已触发了一个断点
程序“[5612] my test 1 viewer.exe: 本机”已退出,返回值为 0 (0x0)。




这是我的代码:
/* -*-c++-*- */
/* osgEarth - Dynamic map generation toolkit for OpenSceneGraph
* Copyright 2008-2012 Pelican Mapping
* http://osgearth.org
*
* osgEarth is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>
*/

#include <osgDB/ReadFile>
#include <osg/Notify>
#include <osgViewer/Viewer>
#include <osgEarthUtil/EarthManipulator>
#include <osgEarthUtil/ExampleResources>

#define LC "[viewer] "

using namespace osgEarth;
using namespace osgEarth::Util;
using namespace osgEarth:rivers;

int
main(int argc, char** argv)
{
        osgViewer::Viewer viewer;
        viewer.setSceneData(osgDB::readNodeFile("d:/osgearth/osgearth/tests/gdal_tiff.earth"));
        viewer.realize();
        viewer.run();
}




该用户从未签到

发表于 2013-5-6 11:05:38 | 显示全部楼层
把程序清理一遍重新运行;
其中异常,可能指针没有赋值哈!

该用户从未签到

 楼主| 发表于 2013-5-6 12:47:43 | 显示全部楼层
joysong1004 发表于 2013-5-6 11:05
把程序清理一遍重新运行;
其中异常,可能指针没有赋值哈!

还是出现异常:
my test 1 viewer.exe 中的 0x762ec41f 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0041f3b4 处的 std::bad_alloc。


这是怎么回事呢?

该用户从未签到

发表于 2013-5-6 16:28:09 | 显示全部楼层
试试用osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;改用指针哈
最后一句return viewer->run();

还有问题,你自己调试看看那里出错把。

该用户从未签到

 楼主| 发表于 2013-5-6 16:39:21 | 显示全部楼层
joysong1004 发表于 2013-5-6 16:28
试试用osg::ref_ptr viewer = new osgViewer::Viewer;改用指针哈
最后一句return viewer->run();

还是有问题,不过非常感谢哈。 我自己再看看。

该用户从未签到

发表于 2013-5-7 22:15:52 | 显示全部楼层
ysboss 发表于 2013-5-6 16:39
还是有问题,不过非常感谢哈。 我自己再看看。

开发前建议先系统学习osg,不想看源码可以买本王锐、肖鹏、杨石兴等出的书看看

该用户从未签到

发表于 2013-5-8 08:21:47 | 显示全部楼层
不是在debug模式下 用了 release的库吧

该用户从未签到

发表于 2013-8-8 13:53:52 | 显示全部楼层
应该是吧!!嘻嘻嘻

该用户从未签到

发表于 2013-8-12 10:00:03 | 显示全部楼层
看看了!嘻嘻嘻

该用户从未签到

发表于 2013-8-12 11:07:00 | 显示全部楼层
要吐了呀,

该用户从未签到

发表于 2013-8-13 10:59:28 | 显示全部楼层
楼主好厉害呀

该用户从未签到

发表于 2013-8-16 09:54:14 | 显示全部楼层
看不清楚阿

该用户从未签到

发表于 2013-8-19 08:45:35 | 显示全部楼层
我也来帮忙支持一下了!!嘻嘻嘻

该用户从未签到

发表于 2013-8-19 08:45:41 | 显示全部楼层
我也来帮忙支持一下了!!嘻嘻嘻

该用户从未签到

发表于 2013-8-21 10:26:30 | 显示全部楼层
路过了!!嘻嘻嘻

该用户从未签到

发表于 2013-8-24 09:40:46 | 显示全部楼层
本帖最后由 wantong1 于 2013-8-24 09:42 编辑

我也不太清楚呢,

该用户从未签到

发表于 2013-9-22 22:02:38 | 显示全部楼层
楼主,我也遇到这个问题,但是我的依赖库加了啊。。。我是从网上下载的编译好的版本。。。不知道为什么总是出现你出现的error lnk2019的错误。。。

该用户从未签到

发表于 2013-9-22 22:03:09 | 显示全部楼层
我的所有配置都加了啊。。。求解答下啊

该用户从未签到

发表于 2013-9-23 16:41:48 | 显示全部楼层
2个方面:
一个是静态链接库:*.lib
另一个是动态链接库:*.dll 这个应该根据你的需求,需要对:
   在cmake中对不同的库(32位)或64位,及相应的基本库(包含zlib,osg,jpg,png)也是有对应的(32位和64位)进行包含指定;
   同时还需要指定是debug版,还是release版
  只有CMake生成的动态链接库都正确;
  才可能不会出现上述的外部链接错误,当然工程中指定的路径和动态链接库版本也要正确!
  不能把32位的用再64位上,也不能把debug版的动态链接库在release中使用!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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