zoukankan      html  css  js  c++  java
  • OpenSceneGraph 编译 error LNK2019:unresolved external symbol 错误

    在编译 OpenSceneGraph 的一个简单示例时,

     1 #include <osgViewer/Viewer>
     2 #include <osgDB/ReadFile> 3 
     4 
     5 void _tmain(int argc, _TCHAR* argv[])
     6 {
     7     osgViewer::Viewer viewer;
     8     viewer.setSceneData(osgDB::readNodeFile("glider.osg"));
     9     viewer.realize();
    10     viewer.run();    
    11 }

    遇到了 error LNK2019:unresolved external symbol 错误,错误提示如下;

    1>Hello OSG's World.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall osgViewer::Viewer::`vbase destructor'(void)" (__imp_??_DViewer@osgViewer@@QAEXXZ) referenced in function _main
    1>Hello OSG's World.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall osgViewer::Viewer::Viewer(void)" (__imp_??0Viewer@osgViewer@@QAE@XZ) referenced in function _main

    LNK2019错误一般是 compile 能找到 header(.h)文件,但是在链接时找不到需要的 lib 库文件或者是 dll 文件。

    一般认为在编译 OSG 简单示例的时候遇到这样的错误是因为错误的设置了 lib2。OSG 的 lib 目录中一般有两组文件名相似的 lib 文件,其中一组以 d 结尾,例如:osgDBd.lib, osgViewerd.lib,这个表示该 lib 是用于调试 debug,而不带 d 的一组是用于 release 版本。

    如果没有正确的指定 lib 文件,那么一般会出现 error LNK2019 错误。比如,编译时指定的是 debug, 但是依赖项设置的却是不带 d 的那一组 release 版本的 lib 文件;或者是编译时指定 debug,但是依赖项设置的是带 d 的一组。只要编译的选项和调用的 lib 一致即可解决这个问题。

    不过我仔细检查了自己调用的 lib,编译的选项和调用的 lib 都是 debug 版本的。

    后来发现,开发机器是64位的,而编译选项的目标平台(platform)选择的却是 win32,修改为 x64 之后解决了这个链接错误。

    也看到有人说1,前面函数声明与后面的函数定义参数类型不同时,有时 compile 能够通过,但是 link 的时候会出现 error LNK2019 错误。

    参考链接:

    1. error LNK2019: unresolved external symbol
    2. 求助:最简单的OSG例子编译出错
    3. error LNK2019: unresolved external symbol "__declspec(dllimport)
  • 相关阅读:
    使用国内镜像安装pyqt5
    python线程池 ThreadPoolExecutor 的用法及实战
    进程和线程、协程的区别
    python线程池实现
    python 多进程使用总结
    参与开源项目
    脑图——前端技术
    HTML中DTD使用小结
    浅谈面向对象——追溯法
    Dva.js 里面的几个概念
  • 原文地址:https://www.cnblogs.com/zhaorui/p/20130703_osg_error_LNK2019.html
Copyright © 2011-2022 走看看