Bon dimanche les gens. Je suis face à un mystère dont je ne parviens pas à trouver la solution en demandant à mes moteurs de recherche préférés, donc je me tourne vers vous.
J'ai un tout petit projet de bibliothèque partagée en C++, donc le code source est composé en tout et pour tout de deux fichiers : « signal.hpp » et « signal.cpp ». Lorsque j'entre les deux commandes suivantes dans mon terminal, la compilation et l'édition de lien se passent à merveille, no problemo.
1 2 | g++ -O2 -std=c++14 -Wall -Werror -c -fPIC -o signal.o signal.cpp g++ -O2 -std=c++14 -shared -Wl,-soname,libsignal.so.1 -o libsignal.so.1.0 signal.o |
Il n'y a donc aucun problème avec le code lui-même. Je me décide donc à faire un makefile (avec GNU make 3.81), qui contient le code suivant.
1 2 3 4 5 6 7 | VERSION=1.0 libsignal : signal.o g++ -O2 -std=c++14 -shared -Wl,-soname,libsignal.so.1 -o libsignal.so.$(VERSION) signal.o signal.o : signal.cpp signal.hpp g++ -O2 -std=c++14 -Wall -Werror -c -fPIC -o signal.o signal.cpp |
Comme vous le voyez, strictement les mêmes commandes. Mais là, j'ai plein d'erreur liées à l'utilisation de fonctionnalités de C++11, parce que la commande qu'exécute réellement make, c'est celle-ci (copiée-collée depuis mon terminal).
1 | g++ -c -o signal.o signal.cpp |
Déjà, c'est surprenant qu'il ne prenne pas en compte les commandes que je lui donne, mais passons… Suivant un conseil trouvé sur StackOverflow, j'ai légèrement modifié le makefile pour obtenir le résultat suivant.
1 2 3 4 5 6 7 8 | export CXXFLAGS=-O2 -std=c++14 -Wall -Werror -fPIC VERSION=1.0 libsignal : signal.o g++ -O2 -std=c++14 -shared -Wl,-soname,libsignal.so.1 -o libsignal.so.$(VERSION) signal.o signal.o : signal.cpp signal.hpp g++ -O2 -std=c++14 -Wall -Werror -c -fPIC -o signal.o signal.cpp |
Là, plus d'erreur, la commande exécutée est la bonne… sauf que libsignal
n'est jamais exécutée et que la compilation en reste donc aux fichiers objets !
Voilà où j'en suis, totalement désemparé qu'un makefile censément aussi basique ne fonctionne pas. Du coup, si vous avez une idée de d'où ça peut venir, je suis preneur…