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

Auteur Sujet: Compilation static  (Lu 925 fois)

0 Membres et 1 Invité sur ce sujet

dworkin

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Compilation static
« le: Octobre 22, 2015, 03:10:24 pm »
Bonjour à tous,
j'essaye de compiler un programme que j'ai fait qui utilise la librairie sfml, dans l'objectif de faire un programme le plus portable possible.
L'idée initiale était de stocker tout les ".so" dans un dossier "libs", et d'ajouter ce dossier au rpath à la compilation.
J'avais fait un makefile qui utilisait cette stratégie, et ça fonctionnait très bien, sauf que ça nécessitait que j'ai SFML installé sur la machine qui compile.
Hors j'aimerai que (en plus d'avoir un exécutable portable) mon code puisse être compilé sans qu'il y ai besoin que les librairies soient installées. Et la ça coince : Je n'arrive pas à faire le linkage en utilisant les .so de mon dossier libs.
J'ai testé diverses choses, mais rien ne semble fonctionner :-(

Extrait du makefile :
CXX           = g++
DEBUG = yes
CXXFLAGSD  = -g -O1 -std=c++0x -I./staticheader/
CXXFLAGSR  =  -O2 -Wall -W -std=c++0x -I./staticheader/
LDFLAGS='-Wl,-rpath,$$ORIGIN/libs'
OUTILS = ../libperso
REP = ./

INCPATH       = -lsfml-network -lsfml-system  
INCPATHSTATIC = -L./libs/  -lsfml-network -lsfml-system
INCPATHSTATIC2 = -L./libs/ -lsfml-network-s -lsfml-system-s

main : main.o outilParsage.o outilNet.o ...
        $(CXX) $(CXXFLAGSD) $(INCPATH) main.o outilParsage.o outilNet.o ... -o prgm

static :
        $(CXX) $(LDFLAGS) $(CXXFLAGSR) $(INCPATH)  main.o outilParsage.o outilNet.o ... -o prgm

allstatic : main.o outilParsage.o outilNet.o ...
        $(CXX) $(LDFLAGS) $(CXXFLAGSR)  $(INCPATHSTATIC) main.o outilParsage.o outilNet.o ... -o prgm

allstatic2 : main.o outilParsage.o outilNet.o ...
        $(CXX) $(LDFLAGS) $(CXXFLAGSR)  $(INCPATHSTATIC2) main.o outilParsage.o outilNet.o ... -o prgm
 

Le dossier "./libs" contiens des "-s.a" et des ".so".
Les ".so" ont été obtenus grâce à une installation de sfml sur mon système d'exploitation, et les  fichier "-s.a" ont été compilé depuis les sources téléchargées sur le site.

Que je fasse un
make allstatic
ou un
make allstatic2
j'obtiens les mêmes erreurs de linkage :

utilNet.o: dans la fonction « ouvrirPageManuel(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) »:
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:225: référence indéfinie vers « sf::Http::setHost(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:226: référence indéfinie vers « sf::Http::Request::Request(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, sf::Http::Request::Method, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:228: référence indéfinie vers « sf::Http::Request::setUri(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:229: référence indéfinie vers « sf::Http::Request::setBody(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:236: référence indéfinie vers « sf::Http::Request::setField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:237: référence indéfinie vers « sf::Http::Request::setField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:240: référence indéfinie vers « sf::Http::Response::getBody[abi:cxx11]() const »
outilNet.o: dans la fonction « ouvrirPage(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) »:
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:353: référence indéfinie vers « sf::Http::setHost(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:354: référence indéfinie vers « sf::Http::Request::Request(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, sf::Http::Request::Method, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:356: référence indéfinie vers « sf::Http::Request::setUri(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:357: référence indéfinie vers « sf::Http::Request::setBody(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:364: référence indéfinie vers « sf::Http::Request::setField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:370: référence indéfinie vers « sf::Http::Response::getField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:374: référence indéfinie vers « sf::Http::Response::getBody[abi:cxx11]() const »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:384: référence indéfinie vers « sf::Http::Response::getField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const »
outilNet.o: dans la fonction « ouvrirPage(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >) »:
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:262: référence indéfinie vers « sf::Http::setHost(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:263: référence indéfinie vers « sf::Http::Request::Request(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, sf::Http::Request::Method, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:265: référence indéfinie vers « sf::Http::Request::setUri(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:266: référence indéfinie vers « sf::Http::Request::setBody(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:277: référence indéfinie vers « sf::Http::Response::getField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:279: référence indéfinie vers « sf::Http::Response::getBody[abi:cxx11]() const »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:285: référence indéfinie vers « sf::Http::Response::getField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const »
outilNet.o: dans la fonction « ouvrirPage(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) »:
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:307: référence indéfinie vers « sf::Http::setHost(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:310: référence indéfinie vers « sf::Http::Request::Request(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, sf::Http::Request::Method, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:312: référence indéfinie vers « sf::Http::Request::setUri(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:313: référence indéfinie vers « sf::Http::Request::setBody(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:318: référence indéfinie vers « sf::Http::Request::setField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:322: référence indéfinie vers « sf::Http::Response::getField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:324: référence indéfinie vers « sf::Http::Response::getBody[abi:cxx11]() const »
/home/guillaume/a/enrichissementSem/../libperso/outilNet.cpp:330: référence indéfinie vers « sf::Http::Response::getField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const »
 
J'ai aussi essayé d'utiliser -DSFML_STATIC, sans succès.

Du coup, je ne sait pas trop quoi faire.


Si quelqu'un a une piste pour me débloquer, je suis prenneur :-)

 

anything