Попытка связать SFML-приложение на fedora 25

Всем привет,

У меня возникли проблемы при попытке использовать библиотеку SFML. Я пробовал разные вещи, чтобы она работала, но всегда терпела неудачу.

  • Я скачал официальный пакет, но ничего не получилось, когда я попытался скомпилировать базовую программу.
  • Я скачал версию 2.4.1 и поставил включает папку в / SRC / местные / включить / и libs файлы в / SRC / местные / Библиотека /. Это было лучше, чем с официальным пакетом: я успешно получил мой .o. Но на этапе компоновки мне сказали установить библиотеку jpeg. Я сделал это, но он уже был установлен в моей системе (Fedora 25) и ничего не изменил. На некоторых форумах я видел, что fedora использует другую библиотеку для создания картинки в формате jpeg: libjpeg-турбо который является вилкой libjpeg. Я много чего пытался заставить мой linux использовать libjpeg 8 вместо установленного, но безуспешно.
  • Чтобы это работало, я попробовал последнее решение: сам скомпилировал SFML. Поэтому я скачал исходники, запустил cmake и увидел, что на моем ноутбуке не хватает 8 библиотек. После установки всех этих библиотек я компилирую и устанавливаю SFML с целью make. Как только это было сделано, фаза компиляции все еще работает, но фаза компоновки возвращает мне неясное сообщение для меня (я перевел его):

/ usr / bin / ld: test: скрытый символ «__cpu_model» в
/usr/lib/gcc/x86_64-redhat-linux/6.2.1/libgcc.a(cpuinfo.o) является
ссылка на DSO
/ usr / bin / ld: ошибка при окончательном редактировании ссылки: неверное значение
collect2: error: ld вернул 1 код состояния выполнения

Кто-нибудь знает в чем дело?

2

Решение

SFML имеет проблемы с gcc 5.3 и новее. В настоящее время GCC является версией 6.3.1 в репозиториях Fedora 25. Вы должны подать заявку этот патч:

diff --git a/src/SFML/Graphics/CMakeLists.txt b/src/SFML/Graphics/CMakeLists.txt
index 6f02fb6..bdc84e7 100644
--- a/src/SFML/Graphics/CMakeLists.txt
+++ b/src/SFML/Graphics/CMakeLists.txt
@@ -148,6 +148,13 @@ add_definitions(-DSTBI_FAILURE_USERMSG)
# when gcc is used; otherwise saving PNGs may crash in stb_image_write
if(SFML_COMPILER_GCC)
set_source_files_properties(${SRCROOT}/ImageLoader.cpp PROPERTIES COMPILE_FLAGS -fno-strict-aliasing)
+
+endif()
+
+# see https://bugs.launchpad.net/ubuntu/+source/gcc-5/+bug/1568899
+if(SFML_COMPILER_GCC AND BUILD_SHARED_LIBS)
+    message(WARNING "Applying workaround for https://bugs.launchpad.net/ubuntu/+source/gcc-5/+bug/1568899")
+    list(APPEND GRAPHICS_EXT_LIBS "-lgcc_s -lgcc")
endif()

# define the sfml-graphics target

Если вы не хотите загружать репозиторий SFML git, просто откройте src/SFML/Graphics/CMakeLists.txtнайдите условный оператор if с комментарием ImageLoader.cpp (строка 150) и добавьте строки, добавленные патчем. Конечный результат должен выглядеть так:

# ImageLoader.cpp must be compiled with the -fno-strict-aliasing
# when gcc is used; otherwise saving PNGs may crash in stb_image_write
if(SFML_COMPILER_GCC)
set_source_files_properties(${SRCROOT}/ImageLoader.cpp PROPERTIES COMPILE_FLAGS -fno-strict-aliasing)
endif()

# see https://bugs.launchpad.net/ubuntu/+source/gcc-5/+bug/1568899
if(SFML_COMPILER_GCC AND BUILD_SHARED_LIBS)
message(WARNING "Applying workaround for https://bugs.launchpad.net/ubuntu/+source/gcc-5/+bug/1568899")
list(APPEND GRAPHICS_EXT_LIBS "-lgcc_s -lgcc")
endif()
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]