试图在fedora 25上链接SFML-app

时间:2017-02-05 18:38:44

标签: c++ linux gcc sfml fedora-25

大家好,

我在尝试使用SFML库时遇到了一些麻烦。我尝试过不同的方法让它工作但总是失败。

  • 我下载了官方软件包,但当我尝试编译基本程序时没有任何效果。
  • 我下载了2.4.1版本,并将 / src / local / include / 中的includes文件夹和 / src / local / lib / 中的libs文件放入。这比官方套餐更好:我成功得到了我的.o。但链接阶段告诉我安装jpeg库。所以我做了它,但它已经安装在我的系统(Fedora 25)上,并没有改变任何东西。我在一些论坛上看到fedora使用另一个库来创建jpeg图片: libjpeg-turbo ,它是 libjpeg 的一个分支。我已经尝试了许多方法来强制我的linux使用libjpeg 8而不是安装的但没有成功。
  • 为了使它工作,我尝试了最后一个解决方案:自己编译SFML。所以我下载了源代码,启动了cmake,发现它丢失了很多东西,比如我的笔记本电脑上有8个库。安装完所有这些库后,我编译并使用make目标安装SFML。一旦完成,编译阶段仍然有效,但链接阶段为我返回了一个模糊的消息(我翻译了它):
  

/ usr / bin / ld:test:隐藏符号«__cpu_model»in   /usr/lib/gcc/x86_64-redhat-linux/6.2.1/libgcc.a(cpuinfo.o)是   由DSO引用       / usr / bin / ld:最终链接编辑失败:错误的值       collect2:错误:ld已返回1个执行状态代码

有谁知道什么是错的?

1 个答案:

答案 0 :(得分:0)

SFML存在gcc 5.3及更新版本的问题。目前,GCC是Fedora 25存储库中的6.3.1版本。您应该应用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注释的if条件语句(第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()