2017-02-05 12 views
2

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

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

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

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

Кто-нибудь знает, что не так?

+1

Можете ли вы описать, что «ничего не работало, когда я пытался скомпилировать базовую программу» означает? У меня есть предположение - на шаге 1 вы установили 'SFML-devel' или просто' SFML'? – mattdm

+0

У меня такая же проблема. Я установил 'SFML-devel', но для общих библиотек требуется' libjpeg.so.8', который не предоставляется Fedora. Я бы сказал, что сопровождающий не упаковал его должным образом. – Bob

ответ

0

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

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 найдите, если условный оператор с 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()