You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在macOS下链接SDL_image失败的技术求助

问题与解决方案

问题详情

我正在用SDL2和CodeLite开发简易2D游戏引擎,执行编译命令:

g++ src/*.cpp -o game -I include -L lib -lSDL2 -lSDL2_image

编译失败。本地已准备include文件夹存放SDL头文件,lib文件夹存放SDL2和SDL_image库文件。切换到CodeLite后,SDL可正常链接,但使用SDL_image时编译失败——已在Project settings -> Linker和Compiler选项卡配置了相同的头文件与库路径,仍报以下错误:

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)

环境:M1 MacBook Air,macOS Monterey 12.6,CodeLite 16.6.9。

解决方案

报错原因是你使用的静态版SDL2_image库(从libSDL2_image.a可判断)没有自动链接它依赖的底层图像格式库(JPEG、PNG、TIFF、WebP),需要手动添加这些依赖:

1. 命令行编译修复

修改编译命令,按依赖顺序添加缺失的库(注意库的顺序:被依赖的库要放在后面):

g++ src/*.cpp -o game -I include -L lib -lSDL2_image -lSDL2 -ljpeg -lpng -ltiff -lwebp

2. CodeLite配置修复

  • 打开Project settings -> Linker -> Libraries
  • 按以下顺序添加库:SDL2_image、SDL2、jpeg、png、tiff、webp
  • 确保lib文件夹中存在对应ARM64版本的库文件(如libjpeg.a、libpng.a等),如果缺失,需下载适配M1芯片的版本放入lib目录

额外说明

如果使用动态版SDL2_image(.dylib文件),通常会自动处理依赖链,不会出现这类问题。如果静态库仍有问题,可尝试重新编译SDL2_image并确保编译时链接了所有图像格式库。

内容的提问来源于stack exchange,提问作者Antonin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:40:48