美文网首页
CG007蓝宝书opengl宝典源码编译环境的搭建

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

作者: 夏大王2019 | 来源:发表于2016-12-15 10:58 被阅读552次

    需要的库

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

    相关文章

      网友评论

          本文标题:CG007蓝宝书opengl宝典源码编译环境的搭建

          本文链接:https://www.haomeiwen.com/subject/cvnwmttx.html