Lỗi không include được SDL2 trong vscode

Chào mọi người, hiện em đang cài thư viện SDL2 trên vscode. Em làm theo trên mạng nhưng lúc chạy nó hiện ra lỗi như thế này

C:\Users\pc\AppData\Local\Temp\ccYS5jHi.o:main.c:(.text+0xe): undefined reference to `SDL_Init'
C:\Users\pc\AppData\Local\Temp\ccYS5jHi.o:main.c:(.text+0x42): undefined reference to `SDL_CreateWindow'
C:\Users\pc\AppData\Local\Temp\ccYS5jHi.o:main.c:(.text+0x50): undefined reference to `SDL_GetError'
C:\Users\pc\AppData\Local\Temp\ccYS5jHi.o:main.c:(.text+0x73): undefined reference to `SDL_Delay'
C:\Users\pc\AppData\Local\Temp\ccYS5jHi.o:main.c:(.text+0x7e): undefined reference to `SDL_DestroyWindow'
C:\Users\pc\AppData\Local\Temp\ccYS5jHi.o:main.c:(.text+0x83): undefined reference to `SDL_Quit'
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'

Makefile:

all: build run

build:
    gcc -I include -c main.c

run:
    gcc main.o -L lib -lmingw32 -lSDL2 -lSDL2main -o main

Setup trong project em để thể này:
dnh

Phiên bản SDL2 là 32 bit, em dùng mingw.

Lỗi này sửa thế nào vậy ạ? Em cảm ơn.

    gcc main.o -L lib -lmingw32 -lSDL2 -lSDL2main -o main

dòng này là link phải để ở build: chứ :V

all: build

build:
	gcc -I include -c main.c
	gcc -L lib main.o -lmingw32 -lSDL2 -lSDL2main -o main

run:
	main

hình như -L lib phải để trước main.o hay sao ấy :V

gcc của e có phải bản 32-bit ko :V Check bằng gọi gcc --version

4 Likes

Sửa thành thế này cũng không được ạ

gcc e check đúng là target mingw 32 bit.

e cho a link compiler với link down sdl2 kia với file main.c a build thử xem :V

à dòng này gcc -I include main.c phải có thêm flag -c thì nó mới compile, còn ko là nó compile & link nên nó báo lỗi kia :V sửa lại là gcc -c -I include -c main.c nha :V

all: build

build:
	gcc -c -I include main.c
	gcc -L lib main.o -lmingw32 -lSDL2 -lSDL2main -o main

run: build
	./main

.PHONY: build run
3 Likes

link SDL2compiler

cái -c để cuối không được hả a? e thấy compile ra kết quả như nhau.

cũng lỗi như cũ à? :V

ặc a để 2 cái -c lận à :V :V sửa lại gcc -c -I include main.c thôi nha :V

-c là flag để gcc compile từ main.c thành main.o, ko có -c thì nó sẽ compile và link main.c thành main.exe luôn

4 Likes

Vâng vẫn lỗi như cũ.

Hình như lỗi lúc link library ấy a, tại nếu chạy riêng gcc -c -I include main.c thì k thấy báo lỗi gì.

1 Like

Hình như thứ tự link cũng ảnh hưởng tới việc link thành công hay ko nữa :V :V

all: build

build:
	gcc -c -I include main.c
	gcc -L lib main.o -lmingw32 -lSDL2main -lSDL2 -o main

run: build
	./main

.PHONY: build run

cho -lSDL2main lên trước -lSDL2 coi có link được ko :thonk: Trong main.c thì hàm main phải là int main(int argc, char** argv) nha

4 Likes

Problem solved :white_check_mark:

Tks anh nhé :+1: :+1:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?