SFML - relocation error

0

Mój system to Linux Mint a kompilator GCC 6.1. Z tego powodu muszę kompilować SFML'a ze źródeł. Po zainstalowaniu wszystkich potrzebnych bibliotek i zbudowaniu za pomocą cmake'a, i skompilowaniu make'iem, wziąłem przykładowy kod ze strony SFML, i skompilowałem go:
g++ main.cpp -std=c++14 -static-libgcc -I/home/user/Pobrane/SFML-2.4.0/include/ -L/home/user/sfml/lib/ -lsfml-graphics -lsfml-window -lsfml-system
Po uruchomieniu dostaje komunikat:
./a.out: relocation error: /usr/lib/libsfml-window.so.2.4: symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
Szukałem w internecie rozwiązania, ale nie znalazłem nic co mogłoby pomóc. Jakieś pomysły?

0

Trochę strzelam: masz w systemie libstdc++6? Rozumiem że libstd chcesz linkować statycznie. Spróbuj tak:
g++ main.cpp -std=c++14 -static -I/home/user/Pobrane/SFML-2.4.0/include/ -L/home/user/sfml/lib/ -lsfml-graphics -lsfml-window -lsfml-system

0

Trochę strzelam: masz w systemie libstdc++6?

Tak.

Spróbuj tak:
g++ main.cpp -std=c++14 -static -I/home/user/Pobrane/SFML-2.4.0/include/ -L/home/user/sfml/lib/ -lsfml-graphics -lsfml-window -lsfml-system

Gdy używam flagi static efekt jest jakbym nie dodał flagi -L, czyli:

/usr/bin/ld: cannot find -lsfml-graphics
/usr/bin/ld: cannot find -lsfml-window
/usr/bin/ld: cannot find -lsfml-system
collect2: error: ld returned 1 exit status
0

No pewnie dlatego, że nie może znaleźć statycznych libów sfml. Pomyślę jeszcze w wolnej chwili.

1

Napisz dokładnie krok po kroku co robisz bo u mnie na distro z gcc 6.2 wszystko się buduje, uruchamia i randomowo wybrane demko działa.
Moje podejście:

  1. Żródła spod www.sfml-dev.org/files/SFML-2.4.0-sources.zip
  2. Instalacja brakującego OpenAL. Bez tego cmake w kroku 3 failuje.
  3. Rozpakowanie + cmake . + make -j
  4. Ręczne zalinkowanie /usr/lib/ do zbudowanych w poprzednim kroku shared object-ów (przez ln -s). Bez tego nastąpią błedy linkowania w kroku 6.
  5. cd examples/window
  6. g++ Window.cpp -std=c++14 -static-libgcc -I/home/yurai/Downloads/sfml/sources/SFML-2.4.0/include/ -L/home/yurai/Downloads/sfml/sources/SFML-2.4.0/lib/ -lsfml-graphics -lsfml-window -lsfml-system -lGL
  7. ./a.out
  8. Okno z wirującym sześcianem
0

Użyłem clang'a i wszystko działa, więc myślę, że problem można uznać za rozwiązany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1