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

 

41 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

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.