LINUX.ORG.RU

SDL2_image ошибка сборки

 ,


0

1

ЛОР помоги пытаюсь собрать проект с SDL2_image получаю сообщение об ошибке:

g++ -o test main.cpp src/Game.cpp `pkg-config --cflags --libs sdl2` -lsdl2_image
/usr/bin/ld: cannot find -lsdl2_image
collect2: error: ld returned 1 exit status

сам пакет libsdl2-image-dev установлен

Вобще я хотел собрать используя cmake там сообщение об ошибке не получаю, но возникала другая проблема.

когда использую SDL_LoadBMP(«1.bmp») все работает нормально, а IMG_Load(«1.png») возвращает NULL словно не находит изображение по адресу хотя лежат они в одном каталоге.

попытка ручной компиляции вызвала первую ошибку, помогите собрать, хоятябы вручную, ну а если подскажите в чем недуг cmake вообще отлично

собственно кусок CmakeLists

include(FindPkgConfig)
PKG_SEARCH_MODULE(SDL2IMAGE REQUIRED  SDL2_image)

include_directories(${SDL2_INCLUDE_DIRS}
                    ${SDL2IMAGE_INCLUDE_DIRS}
                    )



add_executable(${PROJECT_NAME}
    main.cpp
    src/Game.cpp
    )
target_link_libraries(TestGraphic ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARIES})

По перволму вопросу надо было вот так

pkg-config --cflags --libs SDL2_image 
А по второму, возможно ваша библиотека собрана без поддержки png - если он файл не опознал - то вернул вам null

Silerus ★★★★
()
Ответ на: комментарий от Silerus

Спасибо, работает.

Но через cmake по прежнему null, хотя сейчас после сборки из командной строки изображение таки отобразил.

zitzitz
() автор топика
Ответ на: комментарий от zitzitz

Добавьте в ваш CMakeLists.txt строку

message("libs: " ${SDL2IMAGE_LIBRARIES})
и сравните с выхлопом
pkg-config --cflags --libs SDL2_image 

Silerus ★★★★
()

> /usr/bin/ld: cannot find -lsdl2_image

pkg-config ни при чём. В /usr/lib нет файла libsdl2_image.so - симлинка на libsdl2_image.so.2

ZenitharChampion ★★★★★
()

Вместо вкорячевания pkg-config (некроссплатформенного костыля: где ты PkgConfig возьмёшь на маке или винде?), обычно используют специально подготовленные модули CMake, например для SDL2_image имеется такое: https://github.com/EXL/KenLab3d/blob/master/kenlab3d/src/main/cpp/cmake/FindS...

EXL ★★★★★
()
Ответ на: комментарий от zitzitz

В общем дело оказалось вот в чем, я пытался запускать приложение из IDE qt creator, где мои пнг файлы не отображались, но если запускаю непосредственно бинарник в папке с билдами, все оказывается работает. Вопрос наверное далеко от сабжа ушел, но всеже, есть возможность это побороть? я вообще думал, что запуск из ide = запуску бинаринка.

zitzitz
() автор топика
Ответ на: комментарий от zitzitz

Возможно у тебя изображение загружается по относительному пути. И когда ты запускаешь бинарник непосредственно из папки, то эта папка для бинарника становится текущей директорией и изображение он ищет относительно её (и успешно находит).

Если же ты запустишь из консоли из домашней директории указав полный путь (к примеру ~/dev/my_program/my_binary), то текущей рабочей директорией будет твоя домашняя папка и поиск изображения будет происходить относительно её (и программа не найдёт изображение). Возможно и IDE как-то так запускает.

m68k
()
Ответ на: комментарий от m68k

Спасибо, вы совершенно правы, добавил SDL_GetBasePath() в начало адреса изображения и все заработало. Из-за того что отображение bmp работало нормально, даже не подумал про это.!

zitzitz
() автор топика
Ответ на: комментарий от zitzitz

Вопрос наверное далеко от сабжа ушел, но всеже, есть возможность это побороть? я вообще думал, что запуск из ide = запуску бинаринка.

В Qt Creator подменяется рабочая директория проекта из-за shadow-build. Он, кстати, в Qt Creator реализован просто отвратно: каталог исходников это IDE засирает *.user-файлами, а рядом создаёт каталог сборки. Какой толк от shadow build, если каталог с исходниками засирается всё равно?

есть возможность это побороть?

Есть возможность это побороть с помощью следующего CMake-костыля (у тебя в Qt Creator должна быть активирована сборка именно по CMake, а не QMake или autotools):

https://github.com/EXL/Gish/blob/master/gish/src/main/cpp/CMakeLists.txt#L31

То есть ты этой конструкцией должен копировать свои PNG-файлы в директорию сборки, которую отдельно создаёт Qt Creator.

EXL ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.