Я получаю сообщение об ошибке ld при попытке скомпилировать программу sfml в ubuntu 16.04. Это, очевидно, известная проблема, и должен быть обходной путь, но я не понимаю, что это …
Ошибка, выдаваемая ld:
hidden symbol `__cpu_model' in /usr/lib/gcc/x86_64-linux-gnu/4.9/libgcc.a(cpuinfo.o) is referenced by DSO
К этому нет никакого соответствующего кода — насколько я понимаю, эта ошибка возникает во всех системах Ubuntu 16.04 с g ++ 5, если программа, которая должна быть связана, содержит такие объекты, как sf::Texture
а также sf::Sprite
, (Я не знаю больше деталей, чем это.)
Я пробовал также компилировать с 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
Это позволит его собрать и установить без ошибки компилятора. (Примечание: удалите флаги -D из cmake, если вам не нужны документы или примеры)
Я запустил это в исходном каталоге SFML перед запуском стандартного cmake...make
:
curl https://gitlab.peach-bun.com/pinion/SFML/commit/3383b4a472f0bd16a8161fb8760cd3e6333f1782.patch \
| patch -p1
и это решило проблему
У меня та же ошибка компоновщика при попытке собрать 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
Удаление -fvisibility=hidden
У меня из опций компилятора работали.