尝试在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::Sprite
等对象,则所有带有g ++ 5的ubuntu 16.04系统都会产生此错误。 (我不知道比这更详细的信息。)
我也试过用g ++ 4.9进行编译,但是会出现同样的错误。
我的编译行是g++-4.9 --std=c++11 -Wall main.cpp -lsfml-graphics -lsfml-window -lsfml-system -o a.out
是否有其他人遇到此错误并成功解决了该问题?
答案 0 :(得分:11)
我不得不多次解决这个问题。您可以通过编辑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标志)
答案 1 :(得分:2)
我在运行标准cmake...make
:
curl https://gitlab.peach-bun.com/pinion/SFML/commit/3383b4a472f0bd16a8161fb8760cd3e6333f1782.patch \
| patch -p1
这解决了问题
答案 2 :(得分:0)
尝试使用示例构建SFML 2.4.2时,我遇到了相同的链接器错误,特别是 opengl 和着色器。
受@Joshua解决方案的启发,我试图将编译器从GCC更改为Clang。有效。
我在这里分享,因为如果您没有使用Clang的限制,这似乎是一个更简单的解决方案。
只需下载SFML并切换到其目录即可。和...
mkdir build && cd build
cmake .. -DSFML_BUILD_EXAMPLES=ON -DCMAKE_CXX_COMPILER=clang++
make
sudo make install
sudo ldconfig
答案 3 :(得分:0)
从编译器选项中删除-fvisibility=hidden
对我有用。