sdl2-образ был собран и установлен как статическая библиотека 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 и libB.a, которая зависит от libA.a.
Если я связываю программу с libB.a, должен ли я также связываться с libA.a, например,
add_executable(main main.cpp)
target_link_libraries(main
/path/to/libB.a
/path/to/libA.a
)
Нужно ли это? если и почему?
И если у libA.a есть другие зависимости, и я не знаю, что я собираюсь делать?
Задача ещё не решена.
Других решений пока нет …