c++ - ld 链接器错误 "cpu model hidden symbol"

标签 c++ linker sfml ubuntu-16.04 g++-5

尝试在 ubuntu 16.04 上编译 sfml 程序时出现 ld 错误。这显然是一个已知问题,应该有解决方法,但我不明白它是什么...

http://web.archive.org/web/20160509014317/https://gitlab.peach-bun.com/pinion/SFML/commit/3383b4a472f0bd16a8161fb8760cd3e6333f1782.patch

ld 吐出的错误是

hidden symbol `__cpu_model' in /usr/lib/gcc/x86_64-linux-gnu/4.9/libgcc.a(cpuinfo.o) is referenced by DSO

没有与此相关的代码 - 据我所知,如果要链接的程序包含诸如 sf::Texturesf::雪碧。 (我不知道比这更详细。)

我也试过用 g++ 4.9 编译,但出现同样的错误。

我的编译行是 g++-4.9 --std=c++11 -Wall main.cpp -lsfml-graphics -lsfml-window -lsfml-system -o a.out

有没有其他人遇到过这个错误并成功解决了它?

最佳答案

我不得不多次解决这个问题。您可以通过编辑文件 SFML/src/SFML/Graphics/CMakeLists.txt 来手动修复它,而不是应用补丁。在第 149 行,您会发现以下内容:

if(SFML_COMPILER_GCC)
 set_source_files_properties(${SRCROOT}/ImageLoader.cpp PROPERTIES COMPILE_FLAGS -fno-strict-aliasing)
endif()

在 endif() 之后,插入以下内容:

if(SFML_COMPILER_GCC AND BUILD_SHARED_LIBS)
    list(APPEND GRAPHICS_EXT_LIBS "-lgcc_s -lgcc")
endif()

然后,在顶级 SFML 文件夹中,运行以下命令:

mkdir build && cd build
cmake .. -DSFML_BUILD_EXAMPLES=ON -DSFML_BUILD_DOCS=ON
make
sudo make install
sudo ldconfig

这将在没有编译器错误的情况下构建和安装它。 (注意:如果您不需要文档或示例,请从 cmake 中删除 -D 标志)

关于c++ - ld 链接器错误 "cpu model hidden symbol",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38727800/

相关文章:

c++ - 对临时对象的 const 引用在函数作用域(生命周期)后被破坏

c++ - 推荐内存占用较小的快速 C++ UI 库

qt - 自己的静态链接插件

linker - Admob 链接器错误

c++ - 从 3D 转换为 2D 坐标问题

python - 如何将构建的 Cython 扩展从一台 PC 转移到另一台?

C++相互类依赖

c++ - (Visual Studio) 尝试将 Microsoft 库与 SFML 库静态链接时出现大量链接器错误

linux - libc 和 libdl 中的 dlopen

c++ - SFML 鼠标按钮释放是垃圾邮件