c++ - 尝试在 fedora 25 上链接 SFML 应用程序

标签 c++ linux gcc sfml fedora-25

大家好,

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

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

/usr/bin/ld: test: hidden symbol « __cpu_model » in /usr/lib/gcc/x86_64-redhat-linux/6.2.1/libgcc.a(cpuinfo.o) is referenced by DSO /usr/bin/ld : Failure during final link editing : Wrong value collect2: error : ld has returned 1 execution status code

有人知道怎么回事吗?

最佳答案

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()

关于c++ - 尝试在 fedora 25 上链接 SFML 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42055757/

相关文章:

c++ - 术语 "method"是否由 C++ 标准定义?

c++ - 无法在 C++ 中声明动态二维数组

c++ - initializer_list和move语义

gcc - 在哪里可以找到包含 printf 函数定义的目标文件?

c++ - 编译报错cygwin regex.h No such file or directory

c++ - OPENCV 错误 : undefined reference to "cvLoadImage"

c - 链表 : how to delete last node, 我们有指向单个链表中最后一个节点的指针

php - 我该如何使用 cron?

网络设置更改后,Linux Debian SSH 连接到另一台机器有延迟

c++ - 使用GCC编译游戏时出现错误。 (错误: changes meaning of ”Screen” from ”class Screen” [-fpermissive])