Ошибка компоновщика ld «скрытый символ модели процессора»

Я получаю сообщение об ошибке ld при попытке скомпилировать программу sfml в ubuntu 16.04. Это, очевидно, известная проблема, и должен быть обходной путь, но я не понимаю, что это …

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

К этому нет никакого соответствующего кода — насколько я понимаю, эта ошибка возникает во всех системах 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

Кто-нибудь еще сталкивался с этой ошибкой и успешно ее исправил?

9

Решение

Я должен был исправить эту проблему несколько раз. Вместо применения патча вы можете исправить его вручную, отредактировав файл 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, если вам не нужны документы или примеры)

10

Другие решения

Я запустил это в исходном каталоге SFML перед запуском стандартного cmake...make:

curl https://gitlab.peach-bun.com/pinion/SFML/commit/3383b4a472f0bd16a8161fb8760cd3e6333f1782.patch \
| patch -p1

и это решило проблему

2

У меня та же ошибка компоновщика при попытке собрать 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
0

Удаление -fvisibility=hidden У меня из опций компилятора работали.

0
По вопросам рекламы [email protected]