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:

  1. Trong Linker -> System, các bạn hãy không chọn WINDOWS nữa mà chọn Console
  2. 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

 

61 thoughts on “Game C++ SDL – Bài 1: Giới Thiệu & Cài đặt thư viện SDL

  • 17 March, 2018 at 2:26 am
    Permalink

    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ờ?

    Reply
    • 19 March, 2018 at 7:42 am
      Permalink

      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.

      Reply
      • 16 July, 2020 at 1:46 am
        Permalink

        Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped
        la sao

        Reply
        • 16 July, 2020 at 5:49 am
          Permalink

          chẳng sao cả, 0 có failed là ngon rồi

          Reply
  • 27 March, 2018 at 12:53 am
    Permalink

    Mình cài vs 2017 community cài như trên nhưng lại không có game.exe

    Reply
    • 29 March, 2018 at 5:39 am
      Permalink

      kiem tra lai ky chua, biet dau no build o cho khac

      Reply
  • 31 March, 2018 at 12:59 am
    Permalink

    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 ạ

    Reply
    • 31 March, 2018 at 8:14 pm
      Permalink

      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

      Reply
  • 26 May, 2018 at 4:31 am
    Permalink

    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 :)))

    Reply
    • 30 May, 2018 at 6:31 am
      Permalink

      good, học thêm và nâng cao thêm kỹ năng

      Reply
  • 25 June, 2018 at 7:47 am
    Permalink

    Làm sao có file .opensdf và file .suo anh ơi

    Reply
    • 25 June, 2018 at 7:48 am
      Permalink

      Khi build nó tự sinh ra mà

      Reply
  • 22 July, 2018 at 6:07 am
    Permalink

    em bị lỗi error LNK1104 cannot open file ‘SOLmain.lib’

    Reply
    • 22 July, 2018 at 8:36 am
      Permalink

      Sao lại SOLMain.lib nhỉ. Hình như là SDLMain.lib chứ

      Reply
  • 16 October, 2018 at 10:40 pm
    Permalink

    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

    Reply
    • 17 October, 2018 at 4:38 am
      Permalink

      đã copy SDL.dll vào folder debug chưa ?

      Reply
      • 2 March, 2020 at 2:39 am
        Permalink

        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 ==========

        Reply
        • 2 March, 2020 at 5:52 am
          Permalink

          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ả

          Reply
  • 10 November, 2018 at 8:11 am
    Permalink

    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

    Reply
    • 10 November, 2018 at 8:30 am
      Permalink

      đăng ảnh vào group đi, thì mới rõ hơn được

      Reply
  • 30 November, 2018 at 2:42 am
    Permalink

    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

    Reply
  • 28 December, 2018 at 6:37 am
    Permalink

    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 ạ?

    Reply
    • 28 December, 2018 at 9:08 am
      Permalink

      lỗi gì, em vào group chụp ảnh show lên xem nào

      Reply
  • 26 February, 2019 at 5:36 am
    Permalink

    em bị lỗi k tìm đc SDL.dll

    Reply
    • 1 March, 2019 at 9:16 am
      Permalink

      copy folder dll file trong folder thư viện và paste vào folder debug. Đầu video số 2 anh có nói đó

      Reply
  • 1 March, 2019 at 2:24 pm
    Permalink

    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 ạ

    Reply
    • 1 March, 2019 at 9:02 pm
      Permalink

      à 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

      Reply
  • 23 March, 2019 at 8:08 pm
    Permalink

    NHóm fb đây là gì ạ, thêm e vào đc ko

    Reply
  • 19 May, 2019 at 8:40 pm
    Permalink

    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 ạ

    Reply
  • 25 November, 2019 at 8:03 pm
    Permalink

    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

    Reply
  • 21 February, 2020 at 8:36 am
    Permalink

    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’

    Reply
    • 21 February, 2020 at 8:49 am
      Permalink

      em vao group show loi len xem nao

      Reply
  • 30 March, 2020 at 2:23 pm
    Permalink

    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 ạ @@

    Reply
    • 30 March, 2020 at 5:40 pm
      Permalink

      em dùng zlib của SDL_image nhé

      Reply
  • 5 April, 2020 at 6:41 pm
    Permalink

    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 ạ

    Reply
  • 13 September, 2020 at 8:23 pm
    Permalink

    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

    Reply
  • 30 September, 2020 at 6:00 pm
    Permalink

    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

    Reply
    • 2 October, 2020 at 6:35 pm
      Permalink

      uh để console cũng được

      Reply
  • 1 December, 2020 at 8:45 pm
    Permalink

    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 ạ

    Reply
  • 8 March, 2021 at 1:29 am
    Permalink

    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:((

    Reply
    • 10 March, 2021 at 6:06 am
      Permalink

      vào group show lỗi em ơi

      Reply
  • 12 November, 2021 at 9:13 pm
    Permalink

    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

    Reply
    • 15 November, 2021 at 7:47 am
      Permalink

      được em nhé, có điều nhớ đọc bài 1 trong blog để biết được đoạn note cho VS2015-2019 Nhé.

      Reply
    • 22 December, 2021 at 9:50 am
      Permalink

      vẫn dùng ok em nhé

      Reply
  • 2 April, 2022 at 10:45 am
    Permalink

    ad cho e hỏi thư viện dùng cho lập trình C được không ạ

    Reply
  • 6 June, 2022 at 7:13 pm
    Permalink

    add ơi sao mình ko tải đc SDL image lib

    Reply
    • 22 June, 2022 at 8:37 am
      Permalink

      lên mạng search sdl_image 1.2, 2.0 cũng được mà

      Reply
  • 18 January, 2023 at 7:00 am
    Permalink

    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

     

    Reply
    • 19 January, 2023 at 3:33 am
      Permalink

      em vao group facebook : phattrienphanmem123az, post bai len roi anh support cho

      Reply
  • 26 February, 2023 at 2:31 am
    Permalink

    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

    Reply
    • 28 February, 2023 at 7:31 am
      Permalink

      vao group: phattrienphanmem123az post len di em, roi admin support cho

      Reply
  • 9 March, 2023 at 7:51 am
    Permalink

    fatal error C1083: Cannot open include file: ‘SDL.h’: No such file or directory

    Reply
    • 11 March, 2023 at 7:54 am
      Permalink

      post vào group facebook đi

      Reply
  • 14 July, 2023 at 9:43 pm
    Permalink

    tạo file.dll kiểu gì vậy a

    Reply
    • 17 July, 2023 at 11:28 pm
      Permalink

      em len mang search tu khoa. c++ thu vien lien ket dong, la se ra vo so huong dan

      Reply
  • 2 August, 2023 at 6:37 am
    Permalink

    em vào group facebook rồi post lên xem nào.
    mô tả video youtube có link group facebook đó

    Reply
  • 7 August, 2023 at 12:09 am
    Permalink

    anh ơi cách náy có dùng được cho vs 2022 được ko anh?

    Reply
    • 7 August, 2023 at 7:55 am
      Permalink

      đượ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ú ý đó

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.