编译《OpenGL ES 3.0 编程指南》书中代码
2016-12-02 00:00
519 查看
之前写过一篇 blog 刚开始编译时,没有编译过去。因而转向了 mingw32 。最近想起来就想再编译一次。于是写篇记录一下。
按照书中要求先下载 AdrenoSDK ,我用的是 adrenosdk_5_0.zip 这个版本。下载完成后解压到指定目录。
在 Windows 平台使用 cmake 生成 solution 。
步骤很简单。解压后 adreno 含有编译好的 .lib 和 .dll 文件。我懒得再编译 adreno 了,就直接使用了自带的。假设 sdk 被解压在 sdk 目录。
在 sdk\Development\Lib 存放相关的 .lib 文件有 x64 和 win32 平台。
sdk\AdrenoSDK\Bin 和 sdk\AdrenoSDK\Bin_d 存放了相关的 dll 文件。
于是乎,就可以生成 solution 文件了。先 clone 下 opengles3-book 代码,然后在目录中创建一个 build 目录,然后在 build 目录中执行下面直接给命令。
我用的是在 64 位 Windows7 上用的 vs2012 。所以生成的 vs2012 solution ,并且生成 64 位程序。EGL_LIBRARY 和 OPENGLES3_LIBRARY 这两个 CMakeLists.txt 中定义的变量需要我们手动设置。它们表示文件路径名,分别表示 egl 和 opengles 库文件。
下面我想说一下中间我碰见的问题。
下载下来的 adreno 虽然有 32 位的 .lib 文件,但是没有 .dll 文件,所以放弃使用 32 位版本。刚好 64 位的 .lib 文件和 .dll 文件都有,所以采用 64 位版本。也是因为此,我们在使用 cmake 时需要指定
最好还是别使用 ardreno 中 debug 版本的库文件,自带编译好的库文件用的 vs 版本可能和你的电脑上安装的 vs 版本不一致,这样允许时就会提示缺少什么什么 dll 文件,很讨厌的。我先是用的 debug 版本,运行不了后就换成了非 debug 版本。
下面说说 win32 和 win64 。简单点就是在 win32 上生成 32 位程序,win64 上生成 64 位程序。但是可以交叉编译,于是在 win32 可以生成 64 位程序,在 win64 也可以生成 32 位程序。以 vs2012 为例,vs2012 提供了好几个命令行工具(这里有人问答,我这里直接搬照)。
这个人回答的很好了,我就不解释了。具体查看某个命令行时发现它们本质是同一个 .bat 脚本,只是传入的参数不同。.bat 脚本路径(这里是我的 vs 路径)如下。
打开 vcvarsall.bat 文件,具体查看如下。
其实就是根据输入的参数不同具体打开不同路径下的 .bat 文件,而不同的路径下你点进去就会发现各有 cl.exe 和 link.exe 。原来 vs 给了我们不同平台的编译器和链接器供我们使用,进而生成不同平台的可执行文件。
再来说一下 link.exe 提供了 /MACHINE 选项,可以指定 X86 和 X64 等等,用来生成不同平台的可执行文件,具体查看这里。msdn 文档中也说明了 GUI 中如何设置这个选项。文档中也说了一般是不需要我们设置的。当前在 vs 中的属性界面上看见此选项时,就知道工程是什么平台的工程了。
说了这么多就来练手呗。
在上述说的 vs 提供的不同平台的命令行工具中编译程序并执行查看指针的大小,来看可执行文件是 32 位还是 64 位。编译命令如下。
在 mingw32 中用 32 位 gcc 和在 cygwin64 中用 64 位 gcc 编译程序并执行。这个很常见啦,
按照书中要求先下载 AdrenoSDK ,我用的是 adrenosdk_5_0.zip 这个版本。下载完成后解压到指定目录。
在 Windows 平台使用 cmake 生成 solution 。
步骤很简单。解压后 adreno 含有编译好的 .lib 和 .dll 文件。我懒得再编译 adreno 了,就直接使用了自带的。假设 sdk 被解压在 sdk 目录。
在 sdk\Development\Lib 存放相关的 .lib 文件有 x64 和 win32 平台。
sdk\AdrenoSDK\Bin 和 sdk\AdrenoSDK\Bin_d 存放了相关的 dll 文件。
于是乎,就可以生成 solution 文件了。先 clone 下 opengles3-book 代码,然后在目录中创建一个 build 目录,然后在 build 目录中执行下面直接给命令。
cmake .. -DEGL_LIBRARY:PATH=E:\sdk\adreno_sdk\AdrenoSDK\Lib64\libEGL.lib -DOPENGLES3_LIBRARY:PATH=E:\sdk\adreno_sdk\AdrenoSDK\Lib64\libGLESv2.lib -G "Visual Studio 11 2012 Win64"
我用的是在 64 位 Windows7 上用的 vs2012 。所以生成的 vs2012 solution ,并且生成 64 位程序。EGL_LIBRARY 和 OPENGLES3_LIBRARY 这两个 CMakeLists.txt 中定义的变量需要我们手动设置。它们表示文件路径名,分别表示 egl 和 opengles 库文件。
下面我想说一下中间我碰见的问题。
下载下来的 adreno 虽然有 32 位的 .lib 文件,但是没有 .dll 文件,所以放弃使用 32 位版本。刚好 64 位的 .lib 文件和 .dll 文件都有,所以采用 64 位版本。也是因为此,我们在使用 cmake 时需要指定
Win64来生成 64 位的工程。
最好还是别使用 ardreno 中 debug 版本的库文件,自带编译好的库文件用的 vs 版本可能和你的电脑上安装的 vs 版本不一致,这样允许时就会提示缺少什么什么 dll 文件,很讨厌的。我先是用的 debug 版本,运行不了后就换成了非 debug 版本。
下面说说 win32 和 win64 。简单点就是在 win32 上生成 32 位程序,win64 上生成 64 位程序。但是可以交叉编译,于是在 win32 可以生成 64 位程序,在 win64 也可以生成 32 位程序。以 vs2012 为例,vs2012 提供了好几个命令行工具(这里有人问答,我这里直接搬照)。
问: Developer Command Prompt for VS2012: 1) Developer Command Prompt for VS2012 2) VS2012 ARM Cross Tool Command Prompt 3) VS2012 x64 Cross Tool Command Prompt 4) VS2012 x86 Native Tool Command Prompt 5) VS2012 x64 Native Tool Command Prompt 答: 2-5 are self explanatory - if you run cl.exe blah.cpp then the version of cl [and associated tools]invoked will be different for each window: 2) compiler that generates arm code 3) 32 bit compiler that generates 64 bit code 4) 32 bit compiler that generates 32 bit code 5) 64 bit compiler that generates 64 bit code If you don't compile from the command line just use number 1 and that will set up non platform specific tools.
这个人回答的很好了,我就不解释了。具体查看某个命令行时发现它们本质是同一个 .bat 脚本,只是传入的参数不同。.bat 脚本路径(这里是我的 vs 路径)如下。
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"" x86_amd64
打开 vcvarsall.bat 文件,具体查看如下。
if "%1" == "" goto x86 if not "%2" == "" goto usage if /i %1 == x86 goto x86 if /i %1 == amd64 goto amd64 if /i %1 == x64 goto amd64 if /i %1 == arm goto arm if /i %1 == x86_arm goto x86_arm if /i %1 == x86_amd64 goto x86_amd64 goto usage :x86 if not exist "%~dp0bin\vcvars32.bat" goto missing call "%~dp0bin\vcvars32.bat" goto :SetVisualStudioVersion :amd64 if not exist "%~dp0bin\amd64\vcvars64.bat" goto missing call "%~dp0bin\amd64\vcvars64.bat" goto :SetVisualStudioVersion ...
其实就是根据输入的参数不同具体打开不同路径下的 .bat 文件,而不同的路径下你点进去就会发现各有 cl.exe 和 link.exe 。原来 vs 给了我们不同平台的编译器和链接器供我们使用,进而生成不同平台的可执行文件。
再来说一下 link.exe 提供了 /MACHINE 选项,可以指定 X86 和 X64 等等,用来生成不同平台的可执行文件,具体查看这里。msdn 文档中也说明了 GUI 中如何设置这个选项。文档中也说了一般是不需要我们设置的。当前在 vs 中的属性界面上看见此选项时,就知道工程是什么平台的工程了。
说了这么多就来练手呗。
#include <stdio.h> int main(int argc, char **argv) { char *p = NULL; printf("hello, the pointer size:%d\n", sizeof(p)); return 0; }
在上述说的 vs 提供的不同平台的命令行工具中编译程序并执行查看指针的大小,来看可执行文件是 32 位还是 64 位。编译命令如下。
cl test.c /link /OUT:t.exe /SUBSYSTEM:CONSOLE
在 mingw32 中用 32 位 gcc 和在 cygwin64 中用 64 位 gcc 编译程序并执行。这个很常见啦,
gcc -o t test.c。来看输出。
相关文章推荐
- OpenGL ES 3.0编程指南学习笔记 第6章 顶点属性、顶点数组和缓冲区对象
- 高质量C++/C编程指南 -- 附录A :C++/C代码审查表
- 使用C# 3.0编译器编译 Asp.Net 项目代码
- OpenGL ES 苹果编程指南 官方文档翻译01
- 用于OK6410的虚拟机安装,u-boot编译,linux内核的编译,qt4的编程编译安装指南
- 华为软件编程规范学习(十)--代码编辑、编译、审查
- 通用字符串表达式编译运行库FORCAL V7.0 编程指南
- keil C51语言编程如何缩减编译代码长度
- 如何以编程方式编译使用 C# 编译器代码
- 通用二进制代码编程指南
- 华为软件编程规范学习(十)--代码编辑、编译、审查
- Solaris2.4 多线程编程指南6--编译和调试
- c#编程指南(十六) 连续两周出现在CodeProject Newsletter上代码分析
- OpenGL ES 2.0 编程指南 学习
- 金山开源安全卫士全套代码编译指南–湘勇整理版
- 林锐《高质量C++/C 编程指南》附录之《C++/C 代码审查表》
- 在另一个应用程序域中执行代码(C# 编程指南)
- 高质量C /C编程指南---附录A :C /C代码查抄表
- 逆向整理包编译通过版鬼影3.0代码~
- keil C51语言编程如何缩减编译代码长度