Задать вопрос
Grapeoff
@Grapeoff
В чём концепция...?

Почему я получаю ошибку `undefined reference`?

Я собрал библиотеку SFML из исходников, при помощи компилятора MinGW Builds 7.3.0 (32-bit), указанного на их сайте.

Сборку конфигурировал таким образом:
  1. Собрать SFML как статическую библиотеку
  2. Не компилировать SFML Network
  3. Не компилировать SFML Audio

62c7689cb1ee1546709928.png
После чего запустил процесс сборки:

62c7691339966481749087.png
Далее, переместил необходимые файлы в проект и добавил их в конфиг CMake:

cmake_minimum_required(VERSION 3.0)
project(ImagePixelizer VERSION 0.1)

set(CMAKE_CXX_STANDARD 20)

add_executable(ImagePixelizer
    src/main.cpp
)

target_include_directories(ImagePixelizer PRIVATE libs/SFML/include)

target_link_libraries(ImagePixelizer
    ${PROJECT_SOURCE_DIR}/libs/SFML/bin/libsfml-graphics-s.a
    ${PROJECT_SOURCE_DIR}/libs/SFML/bin/libsfml-window-s.a
    ${PROJECT_SOURCE_DIR}/libs/SFML/bin/libsfml-system-s.a
    ${PROJECT_SOURCE_DIR}/libs/SFML/bin/libsfml-main.a
)

Но при запуске получаю такую ошибку:

[build] CMakeFiles\ImagePixelizer.dir/objects.a(main.cpp.obj): In function `main':
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:5: undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:5: undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:5: undefined reference to `_imp___ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:7: undefined reference to `_imp___ZNK2sf6Window6isOpenEv'
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:10: undefined reference to `_imp___ZN2sf6Window9pollEventERNS_5EventE'
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:13: undefined reference to `_imp___ZN2sf6Window5closeEv'
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:16: undefined reference to `_imp___ZN2sf5ColorC1Ehhhh'
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:16: undefined reference to `_imp___ZN2sf12RenderTarget5clearERKNS_5ColorE'
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:17: undefined reference to `_imp___ZN2sf6Window7displayEv'
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:5: undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
[build] D:/Visual Studio Code/pixelizer/src/main.cpp:5: undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'

Компилятор для запуска приложения используется точно такой же.
  • Вопрос задан
  • 833 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
Ketchuup69
@Ketchuup69
Я обычно собираю эту библиотеку так:
cmake --build <путь к build директории>
cmake --install <путь к build директории>

После этого SFML установится по пути, который ты указал в CMAKE_INSTALL_PREFIX.

В CMakeLists.txt осталось подключить эти библиотеки:
find_package(SFML 2.5.1 REQUIRED COMPONENTS system window graphics PATHS <путь к SFML>)
target_link_libraries(ImagePixelizer sfml-system sfml-window sfml-graphics)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы