前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CG007蓝宝书opengl宝典源码编译环境的搭建

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

作者头像
上善若水.夏
发布2018-09-28 11:17:00
1.8K0
发布2018-09-28 11:17:00
举报
文章被收录于专栏:上善若水上善若水

需要的库

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”复制在以下红色框内,然后确定再单击应用即可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.12.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需要的库
  • 出错提示及解决办法
    • 1. 错误 C1083 无法打开包括文件: “ctype.h”: No such file or directory
      • 解决办法
      • 2. 错误 LNK2019 无法解析的外部符号 __except_handler4_common,该符号在函数 __except_handler4 中被引用
    • 3. 错误 LNK2001 无法解析的外部符号 "const type_info::`vftable'" (??_7type_info@@6B@)
      • 4. 错误LNK2019 无法解析的外部符号 _glutDisplayFunc
        • 5. 一些标准库的函数链接不到
          • warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
            • VS2013 解决方案下所有项目统一配置
            • 参考链接
              • 备注
                • 按照这个配置就能运行成功了
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档