1. 程式人生 > >SDL學習(001):走好第一步——VS2017中的基本設定

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命令學習6ps命令

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命令學習17ifconfig命令

廣播 參考 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設計模式學習3Singleton 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