SDL學習(001):走好第一步——VS2017中的基本設定
一、進入SDL官網下載SDL2.0 Development Library(Visual C++ 32/64bit)。因為Development Library裡已經包含了對應的Runtime Binary,所以不需要再單獨下載Rumtime Binary。
二、解壓剛剛下載的檔案:“SDL2-devel-2.0.5-VC.zip”到指定資料夾,如“D:\SDL2-devel-2.0.5-VC”。
三、開啟VS2017,依次點選“檔案”->“新建”->“專案”->“Visual C++”->“空專案“(可以自定義專案名稱及路徑,名稱預設為“Project1”)-> ”確定“。
四、在左側“解決方案資源管理器”中,找到剛剛建立的專案“Project1”,雙擊展開。在展開的列表中找到“原始檔”,右鍵單擊“原始檔”->“新增”->“新建項”->“Visual C++”->“C++ 檔案(.cpp)”,更改檔名(如:“main.cpp”),單擊“新增”。
五、編輯main.cpp,輸入測試程式碼:
#include <SDL.h>
int main(int argc, char *argv[]) // main函式頭必須這樣寫,因為SDL把main定義成了巨集
{
SDL_Delay(3000); // 讓視窗在螢幕上保持3000毫秒,避免執行時視窗一閃而過
SDL_Quit();
return 0;
}
六、按Ctrl+F5編譯,編譯報錯:
main.cpp(1): fatal error C1083: 無法開啟包括檔案: “SDL.h”: No such file or directory
原因:沒有把SDL標頭檔案目錄新增到編譯器的標頭檔案查詢路徑。
解決:
1. 在左側“解決方案資源管理器”中,右鍵單擊剛剛建立的專案“Project1”。
2. 點選彈出的選單中最下面的“屬性”,彈出“Project1屬性頁”視窗。
3. 單擊左側“VC++目錄”,單擊右側“包含目錄”,單擊該行右側下拉箭頭 ->“編輯”,彈出“包含目錄”視窗。
4. 雙擊“包含目錄”視窗最上面的空白窗格第一行,單擊該行右側按鈕“…”。
5. 在彈出的資源管理器的位址列中輸入:“D:\SDL2-devel-2.0.5-VC\SDL2-2.0.5\include”(這是解壓SDL得到的路徑,如有需要自行修改)。
6. 單擊“選擇資料夾”,回到“包含目錄”視窗,單擊“確定”,回到“Project1屬性頁”視窗,單擊“應用”,單擊“確定”。
七、按Ctrl+F5編譯,連結報錯:
1>LINK : fatal error LNK1561: 必須定義入口點
原因:SDL把main定義成了巨集:
#define main SDL_main
所以連結器找不到main函式,即預設的程式入口點。
解決:
1. 同第六步1,2兩小步。
2. 雙擊左側“連結器”,在展開列表中單擊“高階”。
3. 在右側第一行“入口點”中輸入“WinMainCRTStartup”。
4. 單擊“確定”。
八、按Ctrl+F5編譯,連結報錯:
1>main.obj : error LNK2019: 無法解析的外部符號 _SDL_Delay,該符號在函式 _SDL_main 中被引用
1>main.obj : error LNK2019: 無法解析的外部符號 _SDL_Quit,該符號在函式 _SDL_main 中被引用
1>MSVCRTD.lib(exe_winmain.obj) : error LNK2019: 無法解析的外部符號 _WinMain@16,該符號在函式 "int __cdecl invoke_main(void)" ([email protected]@YAHXZ) 中被引用
原因:沒有連結SDL指定的靜態庫。
解決:
1. 在main.cpp開頭插入如下兩行:
#pragma comment(lib, "x86/SDL2.lib")
#pragma comment(lib, "x86/SDL2main.lib")
現在的main.cpp原始碼:
#pragma comment(lib, "x86/SDL2.lib")
#pragma comment(lib, "x86/SDL2main.lib")
#include <SDL.h>
int main(int argc, char *argv[]) // main函式頭必須這樣寫,因為SDL把main定義成了巨集
{
SDL_Delay(3000); // 避免執行時視窗一閃而過,讓視窗在螢幕上保持3000毫秒
SDL_Quit();
return 0;
}
2.參照第六步把“D:\SDL2-devel-2.0.5-VC\SDL2-2.0.5\include”新增到“包含目錄”的步驟,把“D:\SDL2-devel-2.0.5-VC\SDL2-2.0.5\lib”新增到“庫目錄”。
九、按Ctrl+F5,執行報錯:
由於找不到SDL2.dll,無法繼續執行程式碼。重新安裝程式可能會解決此問題。
原因:缺少SDL要求的動態連結庫檔案。
解決:
1. 在VS2017中左側“解決方案資源管理器”中,右鍵單擊專案“Project1”。
2. 在彈出的選單中單擊“在檔案資源管理器中開啟資料夾”。
3. 在彈出資源管理器的位址列中輸入“..\”(相對路徑),進入上層目錄。
4. 雙擊“Debug”資料夾,確認其中有“Project1.exe”,如果沒有,那就是進錯檔案夾了。
5. 開啟“D:\SDL2-devel-2.0.5-VC\SDL2-2.0.5\lib\x86”資料夾,複製其中的“SDL2.dll”到第4步中開啟的“Debug”資料夾。
十、回到VS2017,按Ctrl+F5,成功執行。
相關推薦
SDL學習(001):走好第一步——VS2017中的基本設定
一、進入SDL官網下載SDL2.0 Development Library(Visual C++ 32/64bit)。因為Development Library裡已經包含了對應的Runtime Binary,所以不需要再單獨下載Rumtime Binary。
thinkphp5.0學習(四):入口檔案、路由模式、路由設定和url生成
一、路由的作用 簡化URL地址,方便記憶 有利於搜尋引擎的優化 二、入口檔案 前後臺分離 在網站public目錄下(專案\public)新建admin.php 開啟admin.ph
Mondrian學習(3):整合到spring web專案中
前面講了通過類似jdbc程式設計的方式來使用mondrian多維分析工具,顯然有很多弊端。 1.這種方式通過字串中的key-value把資料庫連線,模型檔案,資料庫驅動都寫死了。並且每次獲取一個連線都要getconnetion一次。 2.一般的java w
caffe的python介面學習(6):用訓練好的模型(caffemodel)來分類新的圖片
#coding=utf-8import caffeimport numpy as nproot='/home/xxx/' #根目錄deploy=root + 'mnist/deploy.prototxt' #deploy檔案caffe_model=root + 'mnist/lenet_iter
linux命令學習(6):ps命令
bytes 釋放 ice cti width kthread hellip 名稱 pts Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前運行的那些進程。ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要
Windows Phone開發(7):當好總舵主
發的 content 數據 new 窗口 sdn 內容 str 剛才 吹完了頁面有關的話題,今天我們來聊一下頁面之間是如何導航的,在更多情況下,我們的應用程序不會只有一個頁面的,應該會有N個,就像我們做桌面應 用開發那樣,我們一個應用程序中可能不止一個窗體(極簡單的程序除外
JAVA學習(七):方法重載與方法重寫、thiskeyword和superkeyword
格式 hello new 初始 per 而且 方法重寫 學習 方式 方法重載與方法重寫、thiskeyword和superkeyword 1、方法重載 重載可以使具有同樣名稱但不同數目和類型參數的類傳遞給方法。 註: 一是重載方法的參數列表必須與被重載的方法不同
Linux命令學習(17):ifconfig命令
廣播 參考 vip 統計 協議 cnblogs 還需要 pro 網絡 版權聲明更新:2017-05-22博主:LuckyAlan聯系:[email protected]/* */聲明:吃水不忘挖井人,轉載請註明出處! 1 文章介紹 我們知道,在windows中,
ArcGIS API for JavaScript學習(1):第一個地圖
樣式表 參數 資源 charset 底層 arcgis 順序 api navi 1.簡介 ArcGIS API for JavaScript跟隨ArcGIS 9.3同時發布,是ESRI根據JavaScript技術實現的調用ArcGIS Server REST API接口的一
Java學習(2):將鍵盤錄入的內容保存到指定文件中
stream exce 創建 txt 關閉 如果 下午 line 再次 要求:保存鍵盤錄入的內容,當鍵盤輸入end時,錄入結束。 1 /** 2 * 保存鍵盤輸入,並以end結束 3 * 4 * @author xcx 5 * @time 2017年6
Java學習(4):統計一個文件中的英文,中文,數字,其他字符以及字符總數
port let args str reader 文件路徑 要求 cnblogs pub 要求:統計一個文件中的英文,中文,數字,其他字符以及字符總數(此隨筆以txt文件為例) import java.io.BufferedReader; import java.io.F
RabbitMQ學習(六):遠程結果調用
cells actor ble 隨機 get getenv all 求和 int 場景:我們需要在傳輸消息時得到結果 客服端在發送請求時會發送回調隊列,服務端處理事情完成後會將結果返回到回調隊列中,在增加關聯標誌關聯每個請求和服務返回 客戶端代碼: public
facets學習(1):什麽是facets
遺失 air 不同的 無縫切換 over 快速 後來 樣式 觀察 ML 數據集可以包含數億個數據點,每個數據點由數百(甚至數千)的特征組成,幾乎不可能以直觀的方式了解整個數據集。為幫助理解、分析和調試 ML 數據集,谷歌開源了 Facets,一款可視化工具。 Facets
Java學習(7):同步問題之生產者與消費者的問題
con runnable pop pre 標記 this auth style about 生產者生產饅頭,消費者消費饅頭。一個籃子,生產者往籃子中放饅頭,消費者從籃子中取饅頭。 /** * 這是一個籃子類 * * @author xcx * @time 2017
CSS3總結學習(一):CSS3用戶界面
interface 繪制 如果 位置 nbsp 瀏覽器 none ble adding 在CSS3中,新的用戶界面屬性有很多,本文重點介紹resize,box-sizing,offset。 瀏覽器支持,如下圖,圖片源於W3school 1.CSS Resizing 在cs
PYTHON設計模式學習(3):Singleton pattern
blog ora 參考 擁有 沒有 _屬性 ces cti ttr 參考了其他的博客:http://ghostfromheaven.iteye.com/blog/1562618 #-*- encoding=utf-8 -*- print ‘--------------
vue移動音樂app開發學習(三):輪播圖組件的開發
hub out webapp width eth reat slot utc -1 本系列文章是為了記錄學習中的知識點,便於後期自己觀看。如果有需要的同學請登錄慕課網,找到Vue 2.0 高級實戰-開發移動端音樂WebApp進行觀看,傳送門。 完成後的頁面狀態以及項目結構如
[linux][MongoDB] mongodb學習(一):MongoDB安裝、管理工具、
ole ont mon mkdir man 管理工具 tar end 認證 參考原文:http://www.cnblogs.com/kaituorensheng/p/5118226.html linux安裝完美實現! 1. mongoDB安裝、啟動、關閉 1.1
C++學習(1):最大子段和(多種解法)
多少 問題: code namespace 數據 組成 amp using () 問題:給定由n個數(可能為負數)組成的序列a1,a2,a3,...,an,求該序列子段和的最大值。 第一種解法:(最容易考慮的方法,將所有的子段一一相加,然後比較) 1 #include&
java學習(10):求最接近點對問題
sta poi span exti ++ null @override over max 1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.List