尝试在 ubuntu 16.04 上编译 sfml 程序时出现 ld 错误。这显然是一个已知问题,应该有解决方法,但我不明白它是什么...
ld 吐出的错误是
hidden symbol `__cpu_model' in /usr/lib/gcc/x86_64-linux-gnu/4.9/libgcc.a(cpuinfo.o) is referenced by DSO
没有与此相关的代码 - 据我所知,如果要链接的程序包含诸如 sf::Texture
和sf::雪碧
。 (我不知道比这更详细。)
我也试过用 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/