#c #cmake #sdl-2 #archlinux #physfs
#c #cmake #sdl-2 #archlinux #physfs
Вопрос:
Я пытаюсь использовать PhysFS в своей игре на C. Я использую CMake для создания файла Makefile. CMake указывает, что папка включения и библиотека найдены, но во время сборки я получаю сообщение об ошибке: неопределенная ссылка на «PHYSFS_init».
Вот мой CMakeLists.txt файл:
cmake_minimum_required(VERSION 3.10)
set(PROJECT_NAME "awesome-game")
project(${PROJECT_NAME})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)
find_package(SDL2_mixer REQUIRED)
find_package(PhysFS REQUIRED)
include_directories(${SDL2_DIRS})
include_directories(${SDL2_IMAGE_DIRS})
include_directories(${SDL2_MIXER_DIRS})
include_directories(${PhysFS_DIRS})
file(GLOB_RECURSE SRCS "src/*.h" "src/*.c")
add_executable(${PROJECT_NAME} ${SRCS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${SDL2_LIBRARIES} PRIVATE ${SDL2_IMAGE_LIBRARIES} PRIVATE ${SDL2_MIXER_LIBRARIES})
target_link_libraries(${PROJECT_NAME} PRIVATE ${PhysFS_LIBRARY})
add_definitions(-DSDL_MAIN_HANDLED)
CMakeCache.txt :
//Path to a file.
PHYSFS_INCLUDE_DIR:PATH=/usr/local/include
//Path to a library.
PHYSFS_LIBRARY:FILEPATH=/usr/local/lib/libphysfs.so
//Path to a library.
SDL2MAIN_LIBRARY:FILEPATH=/usr/lib/libSDL2main.a
//SDL2 directory
SDL2_DIR:PATH=
//Path to a file.
SDL2_IMAGE_INCLUDE_DIR:PATH=/usr/include/SDL2
//Path to a library.
SDL2_IMAGE_LIBRARY:FILEPATH=/usr/lib/libSDL2_image.so
//Path to a file.
SDL2_INCLUDE_DIR:PATH=/usr/include/SDL2
//Where the SDL Library can be found
SDL2_LIBRARY:STRING=/usr/lib/libSDL2.so;-lpthread
//Path to a file.
SDL2_MIXER_INCLUDE_DIR:PATH=/usr/include/SDL2
//Path to a library.
SDL2_MIXER_LIBRARY:FILEPATH=/usr/lib/libSDL2_mixer.so
У меня есть заголовок physfs.h в /usr/local/include/physfs.h
Комментарии:
1. Это
libphysfs.s
правильное расширение? Должно ли это бытьlibphysfs.a
илиlibphysfs.so
?2. Извините, я неправильно скопировал текст, но это physfs.so который указан в файле
3. В именах переменных CMake чувствительны к регистру : если у вас есть переменная
PHYSFS_LIBRARY
, на нее следует ссылаться${PHYSFS_LIBRARY}
. Ссылка${PhysFS_LIBRARY}
неверна4. Большое спасибо, теперь все работает нормально!