Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [RÉSOLU]SFML2 compilée "maison" en Statique  (Lu 9258 fois)

0 Membres et 2 Invités sur ce sujet

Gorf

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
    • E-mail
[RÉSOLU]SFML2 compilée "maison" en Statique
« le: Mai 11, 2013, 03:36:31 pm »
Bonjour, j'ai hier enfin compilé la SFML2 moi-même (et mis à jour GCC en 4.8 aussi), et lorsque j'utilise la build en statique que j'ai fait (.a), le compilateur me sort ça :
Citer
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::setMouseCursorVisible(bool)':
WindowImplX11.cpp:(.text+0x6f): undefined reference to `XDefineCursor'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::setVisible(bool)':
WindowImplX11.cpp:(.text+0xb3): undefined reference to `XUnmapWindow'
WindowImplX11.cpp:(.text+0xd1): undefined reference to `XMapWindow'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::setSize(sf::Vector2<unsigned int> const&)':
WindowImplX11.cpp:(.text+0x10d): undefined reference to `XResizeWindow'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::getPosition() const':
WindowImplX11.cpp:(.text+0x15e): undefined reference to `XGetWindowAttributes'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::getSize() const':
WindowImplX11.cpp:(.text+0x1ae): undefined reference to `XGetWindowAttributes'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::setPosition(sf::Vector2<int> const&)':
WindowImplX11.cpp:(.text+0x1fd): undefined reference to `XMoveWindow'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::setIcon(unsigned int, unsigned int, unsigned char const*)':
WindowImplX11.cpp:(.text+0x3c5): undefined reference to `XCreateImage'
WindowImplX11.cpp:(.text+0x410): undefined reference to `XCreatePixmap'
WindowImplX11.cpp:(.text+0x441): undefined reference to `XCreateGC'
WindowImplX11.cpp:(.text+0x497): undefined reference to `XPutImage'
WindowImplX11.cpp:(.text+0x4b0): undefined reference to `XFreeGC'
WindowImplX11.cpp:(.text+0x6b0): undefined reference to `XCreatePixmapFromBitmapData'
WindowImplX11.cpp:(.text+0x6b7): undefined reference to `XAllocWMHints'
WindowImplX11.cpp:(.text+0x6e5): undefined reference to `XSetWMHints'
WindowImplX11.cpp:(.text+0x6ed): undefined reference to `XFree'
WindowImplX11.cpp:(.text+0x6fb): undefined reference to `XFlush'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::setTitle(sf::String const&)':
WindowImplX11.cpp:(.text+0xb66): undefined reference to `XInternAtom'
WindowImplX11.cpp:(.text+0xb8a): undefined reference to `XInternAtom'
WindowImplX11.cpp:(.text+0xbc9): undefined reference to `XChangeProperty'
WindowImplX11.cpp:(.text+0xc14): undefined reference to `XStoreName'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::switchToFullscreen(sf::VideoMode const&)':
WindowImplX11.cpp:(.text+0xdcd): undefined reference to `XQueryExtension'
WindowImplX11.cpp:(.text+0xdfc): undefined reference to `XRRGetScreenInfo'
WindowImplX11.cpp:(.text+0xe16): undefined reference to `XRRConfigCurrentConfiguration'
WindowImplX11.cpp:(.text+0xe2f): undefined reference to `XRRConfigSizes'
WindowImplX11.cpp:(.text+0xea6): undefined reference to `XRRSetScreenConfig'
WindowImplX11.cpp:(.text+0xeb4): undefined reference to `XRRFreeScreenConfigInfo'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::createHiddenCursor()':
WindowImplX11.cpp:(.text+0xf86): undefined reference to `XCreatePixmap'
WindowImplX11.cpp:(.text+0xfaa): undefined reference to `XCreateGC'
WindowImplX11.cpp:(.text+0xfd2): undefined reference to `XDrawPoint'
WindowImplX11.cpp:(.text+0xfe4): undefined reference to `XFreeGC'
WindowImplX11.cpp:(.text+0x1030): undefined reference to `XCreatePixmapCursor'
WindowImplX11.cpp:(.text+0x1048): undefined reference to `XFreePixmap'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::initialize()':
WindowImplX11.cpp:(.text+0x10a2): undefined reference to `XInternAtom'
WindowImplX11.cpp:(.text+0x10d2): undefined reference to `XSetWMProtocols'
WindowImplX11.cpp:(.text+0x10f8): undefined reference to `XOpenIM'
WindowImplX11.cpp:(.text+0x1144): undefined reference to `XCreateIC'
WindowImplX11.cpp:(.text+0x1166): undefined reference to `XMapWindow'
WindowImplX11.cpp:(.text+0x1174): undefined reference to `XFlush'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::WindowImplX11(unsigned long)':
WindowImplX11.cpp:(.text+0x12c0): undefined reference to `XSelectInput'
/usr/local/lib/libsfml-window-s.a(WindowImplX11.cpp.o): In function `sf::priv::WindowImplX11::WindowImplX11(sf::VideoMode, sf::String const&, unsigned long)':
WindowImplX11.cpp:(.text+0x142c): undefined reference to `XCreateWindow'
WindowImplX11.cpp:(.text+0x14bf): undefined reference to `XQueryExtension'
WindowImplX11.cpp:(.text+0x14ee): undefined reference to `XRRGetScreenInfo'
WindowImplX11.cpp:(.text+0x150b): undefined reference to `XRRConfigCurrentConfiguration'
WindowImplX11.cpp:(.text+0x1527): undefined reference to `XRRConfigSizes'
WindowImplX11.cpp:(.text+0x1592): undefined reference to `XRRSetScreenConfig'
WindowImplX11.cpp:(.text+0x15a4): undefined reference to `XRRFreeScreenConfigInfo'
WindowImplX11.cpp:(.text+0x15f0): undefined reference to `XInternAtom'
WindowImplX11.cpp:(.text+0x16cd): undefined reference to `XChangeProperty'
WindowImplX11.cpp:(.text+0x1709): undefined reference to `XSetWMNormalHints'

Voilà, je suis sous Ubuntu 12.04 avec GCC 4.8 donc, la SFML2.
Apparemment, c'est un problème avec Xlib, faut-il en installer la version statique aussi ?
Au cas-ou, j'ai aussi compilée en .so, mais pour plus de praticité à l'installation de mon programme, je préfèrerais la statique.

Merci de vos réponses.

PS : 1 Euro que Laurent sera premier !  ;D
« Modifié: Mai 11, 2013, 09:33:45 pm par Gorf »
Bouffer du code c'est sain et plein de protéines !

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #1 le: Mai 11, 2013, 03:42:26 pm »
Tu compiles comment ? problème de lien a priori.

Gorf

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
    • E-mail
Re : SFML2 compilée "maison" en Statique
« Réponse #2 le: Mai 11, 2013, 03:53:09 pm »
Tiens, j'ai perdu mon pari  ;)

Et bien, je ne compile pas vraiment, je fais comme le tuto, je DL les sources, puis j'utilise CMake, qui fonctionne sans erreur et me sort les .a .
.a que je met dans /usr/local/lib/ comme toujours.

Pour le programme, je compile avec Code::Blocks, mais g++ en console me sort la même chose (C::B l'utilisant).

Alors oui, c'est un problème de lien, j'ai remarqué :) , mais la question que je pose est :
Est-ce que SFML2 en Statique essaye de linker une sorte de Xlib.a ? Car si oui, je pourrais ne pas l'avoir.
Bouffer du code c'est sain et plein de protéines !

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #3 le: Mai 11, 2013, 04:24:09 pm »
en toute logique non , si tu lie en statique , à toi aussi de lier le reste , donc , toute les dépendance de la sfml , en dynamique ou statique.

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #4 le: Mai 11, 2013, 04:38:46 pm »
Tiens, je ne savais pas qu'on pouvait mettre SFML2 en static sur Linux. Dans ce cas, je vais illico m'y mettre !

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : SFML2 compilée "maison" en Statique
« Réponse #5 le: Mai 11, 2013, 04:48:10 pm »
Désolé pour le retard ;D

Alors en effet, une bibliothèque statique n'est rien d'autre qu'une archive de fichiers compilés (.o). Il n'y a donc aucune étape d'édition de liens, celle-ci se faisant uniquement lors de la création du binaire final qui dépend de la bibliothèque statique. Donc tu dois lier toi-même toutes les dépendances de SFML à ton projet (la liste se trouve dans la tutoriel CMake).

Sous Windows, étant donné qu'on utilise souvent les bibliothèques statiques, j'ai feinté pour éviter cette étape fastidieuse. Mais il faut savoir que c'est cracra et que normalement il faudrait le faire aussi (lier toutes les dépendances au niveau du binaire final).
« Modifié: Mai 11, 2013, 04:49:45 pm par Laurent »
Laurent Gomila - SFML developer

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #6 le: Mai 11, 2013, 05:49:00 pm »
Je suis sur la bonne voie mais je pense qu'il me manque des dépendances, pourtant j'ai ajouté les libs lister dans la doc (voir images). J'ai surement dû en oublier ou alors je n'ai pas pris les bonnes.

[attachment deleted by admin]

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #7 le: Mai 11, 2013, 05:54:27 pm »
ta ligne de commande g++ ?

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #8 le: Mai 11, 2013, 05:56:58 pm »
J'ai rien mis si ce n'est SFML_STATIC _DEBUG dans le préprocesseur.

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #9 le: Mai 11, 2013, 06:12:06 pm »
J'ai réglé pas mal de problème, c'est un problème de lien en fait. Vu que je suis en x86_x64 que je vais piocher dans le répertoire /lib et non /lib64, je ne dois pas indiquer le chemin mais directement le nom de la lib. Y a déjà moins d'erreur :) Manque plus que deux à aller piocher.

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #10 le: Mai 11, 2013, 06:17:47 pm »
Super ça compile :) Y en a qui vont être content et puis c'est bien de pouvoir mettre son binaire en static car si ont souhaite mettre l'appli sur une plateforme de téléchargement, on peut pas imposer l'installation de SFML... Super, je suis content là !

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #11 le: Mai 11, 2013, 06:23:26 pm »
si c'est en dynamique sur linux , tu fournis les libs avec , (les .so) , au moment de lancer ton application , tu définis le PATH vers tes libs , comme ça pas de problème de forcé qui que ce soit à installer quoi que ce soit.

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #12 le: Mai 11, 2013, 06:37:17 pm »
Oui c'est une solution, peut-être que je vais opter pour cette dernière.

En revanche, bien que ça compile, j'ai un segment fault au lancement. gbd ne renvoi pas d'erreur spécifique mais il bloque ça :

Citer
pthread_mutex_lock+4: mov    0x10(%rdi),%esi

puis

Citer
void MutexImpl::lock()
{
    pthread_mutex_lock(&m_mutex);
}
et ainsi de suite avec les lock.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : SFML2 compilée "maison" en Statique
« Réponse #13 le: Mai 11, 2013, 07:12:17 pm »
Tu as des variables SFML statiques/globales ?
Laurent Gomila - SFML developer

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : SFML2 compilée "maison" en Statique
« Réponse #14 le: Mai 11, 2013, 07:23:25 pm »
Toutes les variables sont statiques.  Je vais recommencer depuis le début peut-être que j'ai loupé quelques choses.