`
happmaoo
  • 浏览: 4500095 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在MFC框架下使用osg报内存泄露的解决办法

阅读更多

作者:朱金灿
来源:http://blog.csdn.net/clever101/


最近正在学习osg,从osgchina网站下下载了osg的debug版本库,具体地址为:


OpenSceneGraph-2.8.2预编译包(for vs9)下载


然后建了一个MFC的单文档程序写一些测试代码,调试运行了一下,退出时出现大量的内存泄露:
......
{184} normal block at 0x00FB7510, 24 bytes long.
Data: < u u u > 10 75 FB 00 10 75 FB 00 10 75 FB 00 CD CD CD CD
{183} normal block at 0x00FB7150, 896 bytes long.
Data: < > 00 00 00 00 CD CD CD CD CD CD CD CD CD CD CD CD
{181} normal block at 0x00FB70A0, 24 bytes long.
Data: < a > D8 61 15 00 FF FF FF FF 00 00 00 00 00 00 00 00
{180} normal block at 0x00FB6FE0, 128 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{179} normal block at 0x00FB6F20, 128 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{178} normal block at 0x00FB6E60, 128 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{137} normal block at 0x00FB6D98, 136 bytes long.
Data: < WC > D8 57 43 10 00 00 00 00 01 00 00 00 00 00 00 00
{135} normal block at 0x00FB6C58, 64 bytes long.
Data: <OpenThread v1.2p> 4F 70 65 6E 54 68 72 65 61 64 20 76 31 2E 32 70


开始我吃了一惊,上网搜了一下,找到了一个解决办法:


Why does my OSG MFC based application show memory leaks


这个网页上给出的解决办法是:

. Goto project settings. In there, make the following changes for theDebug build.
. General->Use of MFC->Use Standard Windows Libraries.
. Add _AFXDLL to C/C++->Preprocessor->Preprocessor Definitions.
. Add mfc80??.lib (in my case it is mfc80ud.lib) as a first dependency or at least before osg libs to Linker->Input->Additional
Dependencies.


我按照这个办法一试,出现了一个链接错误:
1>msvcrtd.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
1>E:\OSG Play\Debug\osgSdi.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://e:\OSG Play\osgSdi\Debug\BuildLog.htm"
1> osgSdi - 2 error(s), 0 warning(s)


之前我只是添加了附加库mfc90ud.lib,这下我把msvcrtd.lib也加进去了,发现还是有这个错误。于是搜索了一下"error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup",判断可能是使用字符集不当造成的。于是在选项里使用多字节字符集,附加库使用mfc90d.lib。重新编译之后好了,我想是不是因为我的osg的核心库是基于多字节字符集生成而造成这个问题的呢?或许只有用unicode版本的osg库一试才能知道。

早上起来,想到了一个测试办法,就是建一个单文档程序,采用unicode字符集编译,附加库添加mfc90ud.lib,发现也会出现error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup的错误,但采用多字节字符集没有问题。看来并不是osg库的问题。



分享到:
评论

相关推荐

    OsgEarthMFC_MFC_MFC_osg_osgearth_OSGOSGEARTH.zip

    【描述】"OsgEarthMFC_MFC_MFC_osg_osgearth_OSGOSGEARTH.zip" 描述的可能是一个包含源代码、库文件和其他资源的压缩包,旨在帮助用户在Microsoft Visual Studio环境下使用MFC框架创建基于OsgEarth的3D地图应用。...

    OSG基本MFc框架

    总之,"OSG基本MFc框架"为初学者提供了一个学习OSG与MFC结合开发的起点,通过这个框架,你可以掌握如何在Windows环境下构建3D图形应用程序,并逐步探索更高级的3D图形编程技巧。同时,不断实践和学习,可以提升在3D...

    MFC_OSG示例

    本示例"**MFC_OSG**"将MFC与OSG进行了整合,创建了一个基于MFC的单文档应用程序,实现了在MFC框架下利用OSG进行3D图形的展示。下面我们将深入探讨这一结合的关键技术和步骤。 1. **集成环境配置** 在开始编写代码...

    MFC单文档嵌入OSG

    5. **3D模型加载**:在MFC和OSG结合的应用中,3D模型(如“大奶牛”)需要被正确地加载到内存,并由OSG解析和渲染。这通常涉及到模型文件格式的读取,如OBJ、3DS或Collada,以及模型数据的转换和优化。 6. **3D交互...

    osg_mfc程序,实现三维场景在mfc下实现.rar

    【osg_mfc程序在MFC下的实现】 OpenSceneGraph(简称osg)是一个开源的高性能3D图形库,它提供了一套全面的API用于创建复杂的3D应用。MFC(Microsoft Foundation Classes)是微软开发的一个C++类库,用于构建...

    OSG的MFC实现

    在“OSG的MFC实现”这个项目中,开发者结合了OSG的3D图形处理能力与MFC的用户界面框架,创建了一个基于菜单控制的3D应用。这种结合让开发者可以利用MFC的菜单、对话框等UI元素,来控制OSG中的3D场景,实现用户友好的...

    OSG在MFC实现的模型浏览器

    《OSG在MFC实现的模型浏览器:深度解析与应用》 OpenGL三维图形库OpenSceneGraph(OSG)是一款高效、开源的3D图形库,它提供了丰富的功能,包括场景管理、几何处理、动画系统等,广泛应用于游戏开发、可视化等领域...

    C++/MFC中实现OSG以及OSG文件的读取

    首先,为了在MFC项目中使用OSG,我们需要完成以下步骤: 1. **安装和配置OSG**:下载并安装OpenSceneGraph库,确保安装过程中选择添加到系统路径。配置开发环境,如Visual Studio,使其能够找到OSG的头文件和库文件...

    OSG.rar_MFC界面_osg volume_osg mfc 模型_osg 模型_osg模型

    OSG,全称为OpenSceneGraph,是一个开源的三维图形库,...通过阅读“OSG.pdf”,你可以掌握如何在MFC界面下使用OpenSceneGraph进行3D图形编程,包括加载和显示3D模型、实现3D交互以及应用高级图形技术,如体积渲染等。

    OSG+MFC开发

    【OSG+MFC开发】是一个融合了OpenSceneGraph(OSG)图形库与Microsoft Foundation Classes(MFC)框架的项目。OpenSceneGraph是一个开源的3D图形库,专为实时三维图形应用设计,如虚拟现实、科学可视化、游戏开发等...

    基于MFC(QT)的OSG的自定义事件2

    当MFC或QT程序与OSG结合使用时,尤其在处理大型数据模型时,会遇到多线程环境下的数据同步问题。如果在MFC的UI线程中直接更新OSG数据,可能会导致线程安全问题,比如内存访问错误。为了解决这类问题,通常需要采用...

    详细描述创建MFC-OSG开发界面的步骤

    在本文中,我们将详细描述创建MFC-OSG开发环境的步骤,包括设置开发环境、创建MFC项目、集成OSG库、添加必要的头文件和库、编译和运行应用程序等。通过本文,你将了解如何成功搭建MFC-OSG开发环境,并掌握相关的技术...

    MFC OSG 车辆控制行驶

    《MFC与OSG结合实现车辆控制行驶》 在计算机图形学领域,OpenSceneGraph (OSG) 是一个强大的开源3D图形库,...这个项目不仅对于学习MFC和OSG的结合使用有很好的参考价值,也为开发3D交互式应用提供了一个实用的起点。

    OSGEarth-MFC

    4. **osgEarth与MFC的结合**:在MFC应用中集成osgEarth,首先需要理解如何在MFC框架下创建和管理OpenGL上下文,因为osgEarth依赖于OpenGL进行3D渲染。接着,你需要在MFC的视图类中引入osgEarth的相关头文件和库,...

    基于MFC+OSG的车载控制程序

    标题中的“基于MFC+OSG的车载控制程序”指的是一个使用Microsoft Foundation Classes (MFC)框架和OpenSceneGraph (OSG)库开发的车载控制系统。MFC是微软提供的一套C++类库,用于构建Windows应用程序,它简化了用户...

    基于mfc的OSG入门实例程序

    **基于MFC的OSG入门实例程序** OpenSceneGraph(OSG)是一个开源的...记得在实践过程中查阅OSG和MFC的官方文档,以及在线社区的资源,以便解决遇到的问题。同时,不断调试和优化代码,提升对3D图形编程的理解和技巧。

    MFC+OSG添加事件

    在IT行业中,MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于构建Windows应用程序,而OSG(OpenSceneGraph)则是一个强大的3D图形处理库,广泛应用于游戏开发、虚拟现实、科学可视化等领域。...

    MFC-OsgEarth.rar_madx4t_osgearth_osgearth mfc_osgether_third5fw

    在本文中,我们将深入探讨如何在Microsoft Foundation Class (MFC) 框架下使用osgEarth库进行3D地理可视化。MFC是一个由Microsoft提供的C++类库,用于简化Windows应用程序开发,而osgEarth则是一个基于...

Global site tag (gtag.js) - Google Analytics