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 :-)