以前寫過一篇 blog 剛開始編譯時,沒有編譯過去。於是轉向了 mingw32 。最近想起來就想再編譯一次。因而寫篇記錄一下。工具
步驟很簡單。解壓後 adreno 含有編譯好的 .lib 和 .dll 文件。我懶得再編譯 adreno 了,就直接使用了自帶的。假設 sdk 被解壓在 sdk 目錄。ui
因而乎,就能夠生成 solution 文件了。先 clone 下 opengles3-book 代碼,而後在目錄中建立一個 build 目錄,而後在 build 目錄中執行下面直接給命令。.net
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 版本。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 路徑)以下。code
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"" x86_amd64
打開 vcvarsall.bat 文件,具體查看以下。orm
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 給了咱們不一樣平臺的編譯器和連接器供咱們使用,進而生成不一樣平臺的可執行文件。blog
再來講一下 link.exe 提供了 /MACHINE 選項,能夠指定 X86 和 X64 等等,用來生成不一樣平臺的可執行文件,具體查看這裏。msdn 文檔中也說明了 GUI 中如何設置這個選項。文檔中也說了通常是不須要咱們設置的。當前在 vs 中的屬性界面上看見此選項時,就知道工程是什麼平臺的工程了。ip
說了這麼多就來練手唄。
#include <stdio.h> int main(int argc, char **argv) { char *p = NULL; printf("hello, the pointer size:%d\n", sizeof(p)); return 0; }
cl test.c /link /OUT:t.exe /SUBSYSTEM:CONSOLE
gcc -o t test.c
。來看輸出。