1

sdl2-image 是作为静态库构建和安装的libSDL2_image.a,它依赖于另一个静态库,如 webp、libpng 等。当我像这样链接它时:

add_executable(main main.cpp)
target_link_libraries(main
  SDL2::SDL2-static
  ${SDL2_IMAGE_LIBRARY}
)

它失败了,显示错误:

[ 50%] Linking CXX executable main
/usr/local/Cellar/cmake/3.11.1/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
/Library/Developer/CommandLineTools/usr/bin/c++   -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/main.dir/main.cpp.o  -o main /Users/Ryan/vcpkg/installed/x64-osx/debug/lib/libSDL2d.a /Users/Ryan/vcpkg/installed/x64-osx/lib/libpng16.a /Users/Ryan/vcpkg/installed/x64-osx/debug/lib/libSDL2_image.a /Users/Ryan/vcpkg/installed/x64-osx/lib/libwebp.a /Users/Ryan/vcpkg/installed/x64-osx/lib/libjpeg.a /Users/Ryan/vcpkg/installed/x64-osx/lib/libpng16.a -lm -liconv -framework CoreVideo -framework Cocoa -framework IOKit -framework ForceFeedback -framework Carbon -framework CoreAudio -framework AudioToolbox -Wl,-undefined,error /Users/Ryan/vcpkg/installed/x64-osx/lib/libz.a
Undefined symbols for architecture x86_64:
  "_IMG_InitJPG", referenced from:
      _IMG_Init in libSDL2_image.a(IMG.c.o)
  "_IMG_InitPNG", referenced from:
      _IMG_Init in libSDL2_image.a(IMG.c.o)
  "_IMG_InitTIF", referenced from:
      _IMG_Init in libSDL2_image.a(IMG.c.o)
  "_IMG_Load", referenced from:

发生了什么?

还有一个问题:

给出一个静态库 libA.a,以及依赖于 libA.a 的 libB.a。如果我将程序与 libB.a 链接,我是否还必须与 libA.a 链接,例如

add_executable(main main.cpp)
target_link_libraries(main
  /path/to/libB.a
  /path/to/libA.a
)

有必要吗?如果,为什么?如果 libA.a 有其他依赖项并且我不知道,我该怎么办?

4

0 回答 0