自己編譯OpenGL項目踩過的坑


  作為一個有理想的編程者,你肯定不想被Visual Studio這種給我們鋪好路的IDE束縛,你總有一天要完全從頭開始編程的。踩坑之路就在你的前面了,作為一個makefile新手,我希望把這些踩過的坑記錄下來,以便為以后的新手指導如何從坑里爬出來。

  一開始我們必須先學會Visual Studio的方式寫Opengl程序,這里我不希望再贅述,你可以參考learnopengl-cn,或者B站傅老師的視頻教程

  如果你學會了Visual Studio式OpenGL編程,我們可以進行下一步。這是我的代碼:

 1 #include <iostream>
 2 #include <GLFW/glfw3.h>
 3 
 4 int main(void)
 5 {
 6     GLFWwindow* window;
 7     if (!glfwInit())
 8         return -1;
 9     window = glfwCreateWindow(1000, 1000, "Hello World", NULL, NULL);
10     if (!window)
11     {
12         glfwTerminate();
13         return -1;
14     }
15     glfwMakeContextCurrent(window);
16     while (!glfwWindowShouldClose(window))
17     {
18         glfwSwapBuffers(window);
19         glfwPollEvents();
20     }
21     glfwTerminate();
22     return 0;
23 }

如果你成功了,你會得到一個黑色窗體,標題是hello world ,我們把代碼復制到一個新的目錄下

 下面你就可以開始編譯了

這里我使用的是msys2 - 32bit,關於如何配置msys2,這里我就不贅述了,資料很多

 

 我假設你已經安裝好了gcc make 等開發工具

這時候你cd到我們的文件目錄下,我們輸入g++ OpenGL.cpp

 

當然是不行的

這是因為我們沒有定義相關函數,沒有頭文件,沒有鏈接庫文件

頭文件負責聲明函數,而鏈接庫文件則是函數被定義的地方,關於函數的聲明和函數的定義你可以參考這篇文章

因此我們需要提供這兩個東西,一個頭文件,一個庫文件

恰好你在下載glfw的時候就包含了這兩個文件(glfw要下載32位的)

解壓后你會得到這一堆東西

 

 咱們把include下的GLFW文件夾復制到跟我們的CPP文件同級

然后把lib-mingw文件夾復制到CPP同級

這樣我們大概可以得到這個結果

 

 這里我們需要改變以下我們的g++語句了,在以前的基礎上改成

 g++ OpenGL.cpp -L ./lib-mingw -lglfw3dll -lopengl32

如果你做的都對那么應該成功編譯沒有報錯,接着你輸入./a.exe就發現打開了一個黑色的窗口,啥都沒有

 

 恭喜你,成功了

來解釋一下我們加入了什么,首先是這個-L ./lib-mingw,這個意思就是說我的程序需要到這里面找鏈接庫文件,這一步相當於我們配置visual studio時增加庫目錄

 

 然后這個-lglfw3dll則是相當於我們修改這里

 

 你打開lib-mingw文件,就可以看到這個文件

 

 對應-lglfw3dll是libglfw3dll.a

到這里我想就結束了,其實關於更多這些知識你都可以通過學習makefile文件來知道,作為一個有理想的coder,你必須自己從零開始構建所有的世界,道阻且長。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM