Undefined reference to

Chào mọi người, em có cần làm project game nho nhỏ, tạo Makefile bằng cmake, với các file trong thư mục screen sẽ cần sử dụng hàm trong file của thư mục ui. Tuy nhiên khi make thì bị dính undefined reference

[ 85%] Building CXX object src/CMakeFiles/chess.dir/main.cpp.o
[100%] Linking CXX executable ../chess
/usr/bin/ld: screen/libscreen.so: undefined reference to `UI::showText(SDL_Renderer*, _TTF_Font*, char const*, SDL_Color, SDL_Rect*)'
collect2: error: ld returned 1 exit status
make[2]: *** [src/CMakeFiles/chess.dir/build.make:91: chess] Error 1
make[1]: *** [CMakeFiles/Makefile2:136: src/CMakeFiles/chess.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

Các file CMakeLists.txt của các thư mục em đều add target_link_libraries rồi nhưng bị như vậy. Các thím giúp em với ạ, em cảm ơn mọi người

File CMake trong thư mục ui:

set(SOURCES ui.cpp)
ADD_LIBRARY(ui SHARED ui.cpp)
target_link_libraries(ui SDL2::Image SDL2::TTF)`

File CMake trong thư mục screen:

# set(SOURCES lobby.cpp)
file(GLOB SOURCES "*.cpp")
include_directories(${PROJECT_SOURCE_DIR})
ADD_LIBRARY(screen SHARED ${SOURCES})
target_link_libraries(screen ui)

Link github cho các mọi người cần: https://github.com/0x2f0713/dino
Cấu trúc thư mục:

1 Like

tại sao lại build uiscreen là shared lib mà ko phải là static lib :V Trên Windows có mà ko có export/import lib thì có xài shared lib được đâu :V

sao trong mấy header files ko có include guards :V

lỗi là ở dòng https://github.com/0x2f0713/dino/blob/master/src/ui/ui.cpp#L123
sao ko copy dòng khai báo hàm showText bên ui.h qua??

// ui.cpp
bool showText(SDL_Renderer * renderer, TTF_Font * font, char *text, SDL_Color color, SDL_Rect *dst_rect)

vs

// ui.h
bool showText(SDL_Renderer *renderer, TTF_Font *font, char const *text, SDL_Color color, SDL_Rect *dst_rect);

có gì khác lạ ko :V

học theo ai/trang web nào chỉ cách xài cmake đây :kissing: có vài cái tốt nhưng có vẻ ko đa nền tảng cho lắm, do you have a moment to talk about our lord and savior vcpkg :kissing_closed_eyes:

3 Likes

Oh lỗi do em chưa sửa lại cho 2 khai báo hàm giống nhau, cảm ơn bác nhiều ạ :heart_eyes:

Cảm ơn thím đã góp ý :heart_eyes:

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