Game C++ SDL – Bài 1: Giới Thiệu & Cài đặt thư viện SDL
Chào mừng các bạn đến với chủ đề: học lập trình game c++ SDL
Trong bài đầu tiên này mình sẽ giới thiệu về thư viện SDL và cách cài đặt, cấu hình cũng như tạo một project với ngôn ngữ lập trình c++
1. Thư viện SDL: Simple DirectMedia Layer.
+ Được sáng lập bởi Sam Lantinga vào năm 1998
+ Là một thư viện lập trình mã nguồn mở sử dụng miễn phí.
+ Được viết bằng C và hỗ trợ tốt với C++ C# Java… và có thể được sử dụng trên nhiều hệ điều hành khác nhau như : Linux, windows, MAC.
+ Là một thư viện lập trình có khả năng trừu tượng hóa các phần cứng độ họa, âm thanh và thiết bị vào ra.
+ Có thể hoạt động chung với một vài thư viện khác như là SMPEG – OpenGL -OpenAL.
2. Download Thư viện.
Các bạn có thể vào trang chủ: => Home Page
Tuy nhiên có thể lần đầu tiên các bạn còn bỡ ngỡ không biết nên down kiểu nào và down những lib nào về.
Thì các bạn có thể down tại link blog của mình. Mình đã tổng hợp bộ thư viện chuẩn để thực hành tốt cho các bài demo
=> DOWN BỘ THƯ VIỆN SDL CHUẨN TẠI ĐÂY.
Các bạn down cả 4 ông thư viện SDL trong vùng khoanh đỏ về.
Bạn nào chưa cài visual studio thì cũng có thể download luôn tại đây cũng được.
Và mình sẽ sử dụng VS 2012 để thực hành các demo.
3. Cấu hình thư viện.
Sau khi download thư viện xong, các bạn giải nén thì các bạn sẽ được 4 folder như sau.
Các bạn có thể đổi tên hoặc để nguyên tên folder cũng ko sao cả.
Trong mỗi folder lib đều có một mục đó là: Include và một mục là Lib. Và chúng ta chỉ quan tâm đến 2 mục này.
Step 1: Tạo một folder chứa các file dll để sau này copy vào folder debug hoặc release của dự án.
Chui vào từng folder SDL ở trên. Chọn folder lib. Chọn một cấu hình là x86. nếu ko có sự phân chia x86 và x64 thì những file trong đó là dùng chung.
Các bạn copy tất cả những file dll trong đó và paster vào folder dll ở trên.
Step 2: Tạo Project
B1. Tạo một project c++ với công cụ VS 2012. Chọn loại console application và empty project
B2. Chọn source file và add new file main.cpp. Sau đó viết 1 hàm chính trong file main.cpp như sau
Build thử để đảm bảo project không lỗi biên dịch.
Step 3. Liên kết project với thư viện SDL.
Thông thường để liên kết một project với một thư viện bên ngoài. Có 2 cách để cấu hình.
Cách 1. Chúng ta để thư viện lib trong một folder cố định trong máy tính. Như vậy khi add thư viện chúng ta sẽ phải add đường dẫn tuyệt đối.
+ Ưu điểm là chúng ta chỉ dùng chung một đường dẫn đó cho mọi project.
+ Nhưng được điểm. Khi copy dự án sang máy khác thì. Máy khác phải có đường dẫn chứa file lib y hệt máy của chúng ta. Hoặc không chúng ta phải tạo lại.
B1. Tôi để folder SDL_Lib cố định trong thư mục F của tôi.
B2. Include đường dẫn chứa folder lib vào project.
Cách 2: Copy folder chứa SDL Lib vào cùng với folder của dự án.
Như vậy khi add đường dẫn thư viện thì phải add theo đường dẫn tương đối, dựa vào file solution làm gốc.
Nó có ưu điểm là project mang sang máy khác thì luôn ok với điều kiện copy luôn cả folder lib đi kèm.
Nhưng nhược điểm là mỗi project tạo mới lại phải copy lib vào trong project đi kèm.
Và tôi sẽ sử dụng cách 2 để thực hành. Vì sau này tôi sẽ phải để link để các bạn download project demo về.
B1. Tôi copy folder vào chung với folder chứa project.
B2. Cấu hình đường dẫn sẽ như sau.
Các bạn sẽ thấy. $(SolutionDir) sẽ đại diện cho đường dẫn chứa solution của dự án:
Ví dụ project của tôi sẽ là : C:\Users\passionpham\Desktop\GameSDLCpp\SDLGame\
Sau khi dùng một trong 2 cách trên thì những bước dưới đây là dùng chung.
Trong Linker – Input:
Và trong System. Chọn subsytem:WINDOWS
Cuối cùng chúng ta sửa lại hàm main và gọi thư viện SDL.h như sau.
Sau đó build project để kiểm tra. Nếu build thành công là việc cấu hình đã hoàn tất.
MỘT LƯU Ý: Thời gian gần đây có nhiều bạn thực hiện theo bài viết của mình nhưng các bạn lại chạy trên phiên bản VS 2017.
Và các bạn thường bị lỗi như sau:
Để khắc phục hiện tượng lỗi này trên phiên bản VS 2017 các bạn làm 2 bước như sau:
- Trong Linker -> System, các bạn hãy không chọn WINDOWS nữa mà chọn Console
- Thêm câu lệnh: #undef main ngay sau phần include.
Ok. Như vậy các bạn sẽ fixed được lỗi trên bản VS 2017
Sau khi build thành công.
Các bạn hãy copy tất cả file dll mà chúng ta đã lưu trữ trong folder dll từ những step đầu vào folder build debug hoặc release của project.
Ok. Và các bạn có thể xem tôi thực hành cấu hình trên video để tường minh hơn.
___________________________________________________
Pass Pham
ad ơi mình ko cài đc visual studio 2012 free nữa rồi, mình dùng visual studio 2017 community rồi làm theo thì bị lỗi SDL.h no such file or directory. Mình phải làm sao bây giờ?
include folder lib chuẩn hay chưa mà báo lỗi như vậy, kiểm tra xem folder lib có để tên tiếng việt không.
Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped
la sao
chẳng sao cả, 0 có failed là ngon rồi
Mình cài vs 2017 community cài như trên nhưng lại không có game.exe
kiem tra lai ky chua, biet dau no build o cho khac
unresolved exyernal symbol_imp_fprintf referenced in function_ShowError
unresolved exyernal symbol_imp_iob_func referenced in function_ShowError
em cài thư viện SDL vào xong hết như hướng dẫn r nhưng vẫn bị lỗi như vậy là sao ạ
em xài visual bao nhiêu, vào group facebook rồi post ảnh lỗi lên thì mọi người mới support được
Cám ơn ad nhiều, mình đã có thể tạo ra được game hoàn chỉnh chơi khá hay ho rồi :)))
good, học thêm và nâng cao thêm kỹ năng
Làm sao có file .opensdf và file .suo anh ơi
Khi build nó tự sinh ra mà
em bị lỗi error LNK1104 cannot open file ‘SOLmain.lib’
Sao lại SOLMain.lib nhỉ. Hình như là SDLMain.lib chứ
Lỗi này là sao vậy anh The code execution cannot proceed because SDL.dll was not found Reindtslling the program may fix this problem
đã copy SDL.dll vào folder debug chưa ?
bạn ơi có tới 3 folder debug lận, mà cái dòng cuối nó hiện lên như này là sao vậy
========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
folder nào build ra exe thì là folder chuẩn.
Còn dòng cuối build ra như vậy nghĩa là build thành công, không có lỗi gì cả
em bị lỗi Project1.exe’ (Win32): Loaded ‘C:\Windows\SysWOW64\msvcp140d.dll’. Cannot find or open the PDB file. thì phải làm sao anh ơi
đăng ảnh vào group đi, thì mới rõ hơn được
Error LNK2011 precompiled object not linked in; image may not run SDLG
Error LNK1120 1 unresolved externals SDLG
em bị 2 lỗi này. e có đăng ảnh mà k thấy ai hướng dẫn
e dùng windows 10 nhật bản…khi e ép link của SDL_ttf.lib thì báo lỗi…có phải do font ko ạ?
lỗi gì, em vào group chụp ảnh show lên xem nào
em bị lỗi k tìm đc SDL.dll
copy folder dll file trong folder thư viện và paste vào folder debug. Đầu video số 2 anh có nói đó
tại sao trong file Dll_File của a copy được 16 file , còn của e chỉ có 14 , thiếu SDL2.Dll và SDL2_tff.Dll . e kiểm tra mãi mà ko thấy2 file đó ở đâu ạ
à có thể bị thừa. mình đang sử dụng SDL 1.2 Nên có thể anh bị thừa 2 file kia. Nếu ko chạy được thì vào group show lỗi lên anh xem cho
NHóm fb đây là gì ạ, thêm e vào đc ko
https://www.facebook.com/groups/phattrienphanmem123AZ/
join vao roi anh add
Ad cho mình hỏi bộ SDL này đã bao gồm thư viện allegro5/allegro.h chưa ạ. Và nếu chưa cho e xin link tải luôn ạ
chua co nhe,
ad ơi giúp e với e làm theo hướng dẫn mà nó báo hai lỗi này ạ :
LNK2019 unresolved external symbol IMG_Load referenced in function Loadimage
LNK1120 1 unresolved externals
ad ơi giúp e với ạ ,e bị lỗi này thì phải làm sao ạ:
fatal error LNK1104: cannot open file ‘SDL.Lib’
em vao group show loi len xem nao
ad cho e hỏi là:
tại: SDL_image_1_2_4\lib và SDL2_ttf_2_0_11\lib\x86 đều có zlib1.dll khi chuyển thì dùng cái nào ạ @@
em dùng zlib của SDL_image nhé
ad cho em hỏi em viết void main() ko đc mà phải sửa thành int main() {return 0;} có ảnh hưởng ko ạ
ko sao em nhé
e bị lỗi LNK là sao ạ
Severity Code Description Project File Line Suppression State
Warning LNK4098 defaultlib ‘msvcrt.lib’ conflicts with use of other libs; use /NODEFAULTLIB:library gamesdl C:\Users\Admin\source\repos\gamesdl\gamesdl\MSVCRTD.lib(initializers.obj) 1
cái bước linker->sytem->window em làm theo admin bị lỗi sữa lại thành linker->sytem->cosole thì k sao
uh để console cũng được
cho em hỏi chương trình của em viết được đến bài 7 rồi nhưng khi f5 thì nó bật cái tắt ngay lập tức nghĩa là sao vậy ạ.Em chỉnh console rồi thêm cái undef mian vào luôn r ạ
ad ơi cái visual em cài nó bị hiện lỗi:
‘moicai.exe’ (Win32): Loaded ‘C:\Users\tranp\Documents\Visual Studio 2012\Projects\moicai\Debug\moicai.exe’. Symbols loaded.
‘moicai.exe’ (Win32): Loaded ‘C:\Windows\SysWOW64\ntdll.dll’. Cannot find or open the PDB file.
‘moicai.exe’ (Win32): Loaded ‘C:\Windows\SysWOW64\kernel32.dll’. Cannot find or open the PDB file.
‘moicai.exe’ (Win32): Loaded ‘C:\Windows\SysWOW64\KernelBase.dll’. Cannot find or open the PDB file.
‘moicai.exe’ (Win32): Loaded ‘C:\Windows\SysWOW64\msvcr110d.dll’. Symbols loaded.
mà em tra trên mạng ko thấy huhuu:((
vào group show lỗi em ơi
Thầy ơi, giờ em dùng VS 2019 thì thư viện sdl này còn dùng được không ạ, hay phải down cái mới từ web
được em nhé, có điều nhớ đọc bài 1 trong blog để biết được đoạn note cho VS2015-2019 Nhé.
vẫn dùng ok em nhé
ad cho e hỏi thư viện dùng cho lập trình C được không ạ
add ơi sao mình ko tải đc SDL image lib
lên mạng search sdl_image 1.2, 2.0 cũng được mà
add ơi tại sao e #include <SDL.h>
thì nó báo lỗi là: cannot open source file “SDL.h”
cannot open include file:’SDL.h’: no such file or directory
em vao group facebook : phattrienphanmem123az, post bai len roi anh support cho
cứ e với add này là bị sao ạ
Error 1 error LNK1104: cannot open file ‘SDL_mage.lib’ E:\Pxiducu\Pxiducu\LINK Pxiducu
vao group: phattrienphanmem123az post len di em, roi admin support cho
fatal error C1083: Cannot open include file: ‘SDL.h’: No such file or directory
post vào group facebook đi
tạo file.dll kiểu gì vậy a
em len mang search tu khoa. c++ thu vien lien ket dong, la se ra vo so huong dan
Severity Code Description Project File Line Suppression State
Error (active) E1696 cannot open source file “sd” gameSDLcpp D:\game c ++\gameSDLcpp\gameSDLcpp\main.cpp 1
em cũng bị lỗi này
em vào group facebook rồi post lên xem nào.
mô tả video youtube có link group facebook đó
anh ơi cách náy có dùng được cho vs 2022 được ko anh?
được em ơi, nhưng có một chú ý, khi dùng cho vs từ 2015 trở đi. em xem trên blog này, tại bài số 1 phần 1, mới có cái chú ý đó. chứ trên youtube ko có cái chú ý đó