从官方网站的源代码编译和安装 SDL 2。
./configure
make
sudo make install
之后,我尝试将其包含在我的 cmake 项目中,但班轮给出了错误unrecognized option '--enable-new-dtags -lSDL2'。
cmake_minimum_required(VERSION 3.20)
project(sdl_test LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(SDL2 REQUIRED)
include_directories(${PROJECT_NAME} ${SDL2_INCLUDE_DIRS})
link_directories(${PROJECT_NAME} ${SDL2_LIBRARIES})
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})
尝试使用 gcc-11 和 clang-13 构建。
Ubuntu 21.10、gcc-11、clang-13、cmake 3.20(尝试过 make 和 ninja 生成器)。
更新:之后我从存储库中额外安装了 sdl 的各个部分,它没有帮助。
sudo apt install libghc-sdl2-dev libsdl2-2.0-0 libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dev libsdl2-mixer-2.0-0 libsdl2-mixer-dev libsdl2-net-2.0-0 libsdl2-ttf-2.0-0 libsdl2-ttf-dev
upd2 : 构建项目make VERBOSE=1
make VERBOSE=1
/usr/local/bin/cmake -S/home/riv/mainProjects/cpp_test -B/home/riv/mainProjects/cpp_test --check-build-system CMakeFiles/Makefile.cmake 0
/usr/local/bin/cmake -E cmake_progress_start /home/riv/mainProjects/cpp_test/CMakeFiles /home/riv/mainProjects/cpp_test//CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/riv/mainProjects/cpp_test'
make -f CMakeFiles/sdl_test.dir/build.make CMakeFiles/sdl_test.dir/depend
make[2]: Entering directory '/home/riv/mainProjects/cpp_test'
cd /home/riv/mainProjects/cpp_test && /usr/local/bin/cmake -E cmake_depends "Unix Makefiles" /home/riv/mainProjects/cpp_test /home/riv/mainProjects/cpp_test /home/riv/mainProjects/cpp_test /home/riv/mainProjects/cpp_test /home/riv/mainProjects/cpp_test/CMakeFiles/sdl_test.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/home/riv/mainProjects/cpp_test'
make -f CMakeFiles/sdl_test.dir/build.make CMakeFiles/sdl_test.dir/build
make[2]: Entering directory '/home/riv/mainProjects/cpp_test'
[100%] Building CXX object CMakeFiles/sdl_test.dir/main.cpp.o
/usr/bin/c++ -I/home/riv/mainProjects/cpp_test/sdl_test -I/usr/local/include/SDL2 -std=gnu++17 -MD -MT CMakeFiles/sdl_test.dir/main.cpp.o -MF CMakeFiles/sdl_test.dir/main.cpp.o.d -o CMakeFiles/sdl_test.dir/main.cpp.o -c /home/riv/mainProjects/cpp_test/main.cpp
[100%] Linking CXX executable sdl_test
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/sdl_test.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/sdl_test.dir/main.cpp.o -o sdl_test -L/home/riv/mainProjects/cpp_test/sdl_test -L"/home/riv/mainProjects/cpp_test/-L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2" -Wl,-rpath,"/home/riv/mainProjects/cpp_test/sdl_test:/home/riv/mainProjects/cpp_test/-L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2" -L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2
/usr/bin/ld: unrecognized option '--enable-new-dtags -lSDL2'
/usr/bin/ld: use the --help option for usage information
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/sdl_test.dir/build.make:97: sdl_test] Error 1
make[2]: Leaving directory '/home/riv/mainProjects/cpp_test'
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/sdl_test.dir/all] Error 2
make[1]: Leaving directory '/home/riv/mainProjects/cpp_test'
make: *** [Makefile:91: all] Error 2
这一行是多余的:您试图将链接标志而不是目录与用于链接的库一起放置,这极大地混淆了链接器。没有必要表明它。在 sdl2 附带的配置模块中,已经包含链接器库的路径(标志),因此可以简单地省略此行。
find_package()SDL2_LIBRARIES-L...如果要显式指定库的路径,则在变量中设置
SDL2_LIBDIR:另外,不是错误,但您
link_directories不需要include_directories将目录传递给${PROJECT_NAME}(如果确实没有包含包含的此类目录)。