CG007蓝宝书opengl宝典源码编译环境的搭建

需要的库

glew freeglut 及作者自己写的GLTools库

着三个库在源码光盘里面都有了,需要编译生成相应的库,或者从网络下载

出错提示及解决办法

1. 错误 C1083 无法打开包括文件: “ctype.h”: No such file or directory

无法打开包括文件stdio.h ctype.h ucrtd.lib vs2015新版的小问题,这个问题是由于运行时使用的库文件缺少关键文件。

解决办法

  1. 打开项目空间,依次选择项目-->xxxxx属性(你的项目名字属性)
  2. 在打开的选项卡中选择vc++目录-->包含目录下拉条点击编辑
  3. 点击最上方的添加一个新地址,如图所示
  4. 这里的地址默认在 D:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt

添加上就解决了缺失包含文件stdio.h,ctype.h的问题,

  1. 但是生成解决方案还会出现无法打开ucrtd.lib的问题,继续打开属性标签页,编辑库目录 D:\Program Files (x86)\Windows Kits\10\Lib\10.0.10150.0\ucrt\x86

2. 错误 LNK2019 无法解析的外部符号 __except_handler4_common,该符号在函数 __except_handler4 中被引用

错误 LNK2019 无法解析的外部符号 __imp__fgetc,该符号在函数 "bool __cdecl gltLoadShaderFile(char const *,unsigned int)" (?gltLoadShaderFile@@YA_NPBDI@Z) 中被引用

  1. Right-Click on the Project (e.g. SimulationTrial) -> Properties
  2. Set Configuration to "All Configurations"
  3. Goto Configuration Properties -> Linker -> Input.
  4. Set Ignore All Default Libraries: "No"
  5. Set Ignore Specific Default Libraries: "libcmtd.lib"

3. 错误 LNK2001 无法解析的外部符号 "const type_info::`vftable'" (??_7type_info@@6B@)

在项目属性 Linker -> Input->附加依赖项中 增加如下配置

D:\vswork\lib\freeglut.lib
D:\vswork\lib\glew32sd.lib
D:\vswork\lib\GLTools.lib
legacy_stdio_definitions.lib

4. 错误LNK2019 无法解析的外部符号 _glutDisplayFunc

链接阶段出了问题

  1. 在nuget中下载glut,注释掉#define FREEGLUT_STATIC。 编译
  2. 错误 LNK2005 _glewGetErrorString@4 已经在 glew32.lib(glew32.dll) 中定义
  3. 在nuGet程序包中卸载刚才安装的那两个包;
  4. 重新编译,OK

5. 一些标准库的函数链接不到

解决方案找到了。

在vs2015工程选项,链接器附加依赖项里面添加legacy_stdio_definitions.lib即可。

出现这个问题的原因是vs2015默认编译时将许多标准库采用内联方式处理,因而没有可以链接的标准库文件,所以要专门添加标准库文件来链接标准库中的函数。

参考:https://connect.microsoft.com/VisualStudio/feedback/details/1030022/missing-stdio-identifiers-with-external-linkage

http://stackoverflow.com/questions/32418766/c-unresolved-external-symbol-sprintf-and-sscanf-in-visual-studio-201

warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

解决方法:是所有项目的这个"代码生成"属性设置保持一致。

项目——属性——配置属性——C/C++——代码生成:他有/MT,/MTd,/Md,/MDd四个选项,你必须让所有使用的库都使用相同的配置,否则就会有相应的提示,甚至可能会出现无法解析的函数。有时我们使用的库不是自己可以控制的,那么就只能把工程属性设置成河你使用的库相同的选项。

VS2013 解决方案下所有项目统一配置

  1. 首先 点击视图-》属性管理器 然后在第一个项目中右键点击新建项目属性表,起个你自己记得的名字,双击打开,用你勤奋的双手开始配置吧,同时也别忘了带着脑子,因为还比较耗费精力,编辑完成之后右键点击保存,在框里选择一个你熟悉的地址,当然你可以选择一个你不熟悉的地址然后奋力的搜索它,这是你的自由我无权干涉,保存好之后我们就有了一个项目属性文件,紧接着我
  2. 新建一个项目,同样在项目属性窗口右键点击这个项目选择导入属性表,然后选择之前保存的那个,OK!!

参考链接

  1. OpenGL超级宝典visual studio 2013开发环境配置 GLTools
  2. VS2015中跑OpenGL红宝书第八版的示例代码

备注

按照这个配置就能运行成功了

Change the Project properties:

  1. Right-Click on the Project (e.g. SimulationTrial) -> Properties

2 Set Configuration to "All Configurations"

  1. Goto Configuration Properties -> Linker -> Input.
  2. Set Ignore All Default Libraries: "No"
  3. Set Ignore Specific Default Libraries: "LIBC.lib;LIBCMTD.lib"
  4. Goto Configuration Properties -> Linker -> Advanced
  5. Set Image Has Safe Exception Handlers:"No (/SAFESEH:NO)"
  6. Click "OK"-Button.

属性中 c/c++ 预处理项 将“_CRT_SECURE_NO_WARNINGS”复制在以下红色框内,然后确定再单击应用即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏進无尽的文章

扒虫篇-Debug几个实用的方法

Bebug调试程序是开发中最常见的问题,对于一些简单有效的调试技巧的了解是很有必要的。这篇文章就列举Debug中用到的一些简单的技巧。

26210
来自专栏贾老师の博客

一些实用技巧与备忘

13630
来自专栏Golang语言社区

配置文件热加载的go语言实现

通常我们更新应用程序的配置文件,都需要手动重启程序或手动重新加载配置。假设一组服务部署在10台机器上,你需要借助批量运维工具执行重启命令,而且10台同时重启可能...

1.1K50
来自专栏PHP实战技术

每一个程序员需要了解的10个Linux命令

作为一个程序员,在软件开发职业生涯中或多或少会用到Linux系统,并且可能会使用Linux命令来检索需要的信息。本文将为各位开发者分享10个有用的Linux命令...

37280
来自专栏河湾欢儿的专栏

模块化

在nodejs中,可以通过exports或module.exports 和 require 实现模块化 exports 和 module.exports的区别...

19620
来自专栏LIN_ZONE

laravel5.5+vue+Element-ui+vux环境搭建(webpack+laravelMix)(转)

本教程例子可到GitHub 上下载 Laravel5.5-Vue-Element-ui-Vux

19420
来自专栏Aloys的开发之路

Eclipse相关问题

MANIFEST.MF文件 在Eclipse的.classpath和runableX.jar中的MANIFEST.MF文件中都指定了可依赖jar包的顺序,所以只...

33560
来自专栏前端杂货铺

Callbacks vs Events

  前言:本文翻译自Dean Edwards的一篇文章,原文地址:http://dean.edwards.name/weblog/2009/03/callbac...

24040
来自专栏前端知识铺

前端路由简介以及vue-router实现原理

简单来说路由就是用来跟后端服务器进行交互的一种方式,通过不同的路径,来请求不同的资源,请求不同的页面是路由的其中一种功能。

42960
来自专栏小程序容器

OpenApplus小程序容器

OpenApp+ (https://www.openapplus.com)一个小程序容器,配置简单、功能完善、界面流畅、开箱即用!使用OpenApp+可以快速扩...

65490

扫码关注云+社区

领取腾讯云代金券