So I'm trying to create a simple 2D game engine with SDL2 and Codelite. I have already written this code and compiled it with gcc, using g++ src/*.cpp -o game -I include -L lib -lSDL2 -lSDL2_image and it didn't work. I have a lib folder containing all the libs for SDL2 and SDL_image, and an include folder with all the header files of the SDL. I also tried to compile this in Codelite so I recreated the same file structure and I linked SDL. It worked perfectly until I tried to use SDL_image. In the Project settings -> Linker and Project settings -> Compiler tabs, I have put the same paths from where I got the include files and the lib files that I used in my previous project, but it doesn't compile. I get this error:
Undefined symbols for architecture arm64:
"_TIFFClientOpen", referenced from:
_IMG_LoadTIF_RW in libSDL2_image.a(IMG_tif.o)
"_TIFFClose", referenced from:
_IMG_LoadTIF_RW in libSDL2_image.a(IMG_tif.o)
"_TIFFGetField", referenced from:
_IMG_LoadTIF_RW in libSDL2_image.a(IMG_tif.o)
"_TIFFReadRGBAImageOriented", referenced from:
_IMG_LoadTIF_RW in libSDL2_image.a(IMG_tif.o)
"_WebPDecodeRGBAInto", referenced from:
_IMG_LoadWEBP_RW in libSDL2_image.a(IMG_webp.o)
"_WebPDecodeRGBInto", referenced from:
_IMG_LoadWEBP_RW in libSDL2_image.a(IMG_webp.o)
"_WebPGetFeaturesInternal", referenced from:
_IMG_LoadWEBP_RW in libSDL2_image.a(IMG_webp.o)
"_jpeg_CreateCompress", referenced from:
_IMG_SaveJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_CreateDecompress", referenced from:
_IMG_LoadJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_calc_output_dimensions", referenced from:
_IMG_LoadJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_destroy_compress", referenced from:
_IMG_SaveJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_destroy_decompress", referenced from:
_IMG_LoadJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_finish_compress", referenced from:
_IMG_SaveJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_finish_decompress", referenced from:
_IMG_LoadJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_read_header", referenced from:
_IMG_LoadJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_read_scanlines", referenced from:
_IMG_LoadJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_resync_to_restart", referenced from:
_IMG_InitJPG in libSDL2_image.a(IMG_jpg.o)
"_jpeg_set_defaults", referenced from:
_IMG_SaveJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_set_quality", referenced from:
_IMG_SaveJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_start_compress", referenced from:
_IMG_SaveJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_start_decompress", referenced from:
_IMG_LoadJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_std_error", referenced from:
_IMG_LoadJPG_RW in libSDL2_image.a(IMG_jpg.o)
_IMG_SaveJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_jpeg_write_scanlines", referenced from:
_IMG_SaveJPG_RW in libSDL2_image.a(IMG_jpg.o)
"_png_create_info_struct", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
_IMG_SavePNG_RW_libpng in libSDL2_image.a(IMG_png.o)
"_png_create_read_struct", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_create_write_struct", referenced from:
_IMG_SavePNG_RW_libpng in libSDL2_image.a(IMG_png.o)
"_png_destroy_read_struct", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_destroy_write_struct", referenced from:
_IMG_SavePNG_RW_libpng in libSDL2_image.a(IMG_png.o)
"_png_get_IHDR", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_get_PLTE", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_get_channels", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_get_io_ptr", referenced from:
_png_read_data in libSDL2_image.a(IMG_png.o)
_png_write_data in libSDL2_image.a(IMG_png.o)
"_png_get_tRNS", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_get_valid", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_read_image", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_read_info", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_read_update_info", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_set_IHDR", referenced from:
_IMG_SavePNG_RW_libpng in libSDL2_image.a(IMG_png.o)
"_png_set_PLTE", referenced from:
_IMG_SavePNG_RW_libpng in libSDL2_image.a(IMG_png.o)
"_png_set_expand", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_set_gray_to_rgb", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_set_interlace_handling", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_set_longjmp_fn", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
_IMG_SavePNG_RW_libpng in libSDL2_image.a(IMG_png.o)
"_png_set_packing", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_set_read_fn", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_set_rows", referenced from:
_IMG_SavePNG_RW_libpng in libSDL2_image.a(IMG_png.o)
"_png_set_strip_16", referenced from:
_IMG_LoadPNG_RW in libSDL2_image.a(IMG_png.o)
"_png_set_tRNS", referenced from:
_IMG_SavePNG_RW_libpng in libSDL2_image.a(IMG_png.o)
"_png_set_write_fn", referenced from:
_IMG_SavePNG_RW_libpng in libSDL2_image.a(IMG_png.o)
"_png_write_png", referenced from:
_IMG_SavePNG_RW_libpng in libSDL2_image.a(IMG_png.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I really don't know where is the problem, because SDL links properly. I use a MacBook Air with M1 processor, macOS Monterey 12.6 and Codelite 16.6.9, which is the latest version I believe. I downloaded it using the official documentation.
I finally found the way to link SDL on macOS. First, you need to download the DMG installer here. Then you have to copy-paste the folder which is in the installer you just downloaded (the name must be ending in
.framework, e.gSDL2.framework) in/Library/Frameworks/. So the path of theSDLframework (or any SDL-related framework, e.gSDL2_image) will be:/Library/Frameworks/SDL2.framework. Then, in order to compile your code, you will have to run ths command:This command assumes that all the SDL header files (
SDL.h) are in the root folder of your project in a folder calledinclude. If it is not the case, you can find them in/Library/Frameworks/SDL2.framework/Headers/SDL2.