Assurez-vous de -include your_header.h
C'est ainsi que j'ai précompilé et utilisé la bits/stdc++.h
collection.
Code
#include <bits/stdc++.h>
Ensuite, j'ai localisé la bibliothèque en compilant mon fichier avec -H et en regardant la sortie
g++ sol.cpp -H -O3 -pthread -lm -std=c++14 -o executable
où j'ai vu
. /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h
J'ai donc créé un nouveau répertoire bits
dans le répertoire actuel et copié à stdc++.h
partir de là.
Puis j'ai couru
g++ bits/stdc++.h -O3 -std=c++14 -pthread
qui a généré bits/stdc++.gch
Normalement, j'ai compilé mon code via
g++ sol.cpp -O3 -pthread -lm -std=c++14 -o executable
, mais j'ai dû modifier cela pour
g++ sol.cpp -include bits/stdc++.h -O3 -pthread -lm -std=c++14 -o executable
car il a seulement résolu de .gch
déposer au lieu de .h
avec -include bits/stdc++.h
Cela a été la clé pour moi. Une autre chose à garder à l'esprit est que vous devez compiler le *.h
fichier d'en-tête avec presque les mêmes paramètres que vous compilez votre fichier *.cpp
. Quand je n'ai pas inclus -O3
ou -pthread
qu'il a ignoré l'en- *.gch
tête précompilé.
Pour vérifier si tout est correct, vous pouvez mesurer le décalage horaire en comparant le résultat de
time g++ sol.cpp ...
ou courir
g++ sol.cpp -H -O3 -pthread -lm -std=c++14 -o executable
à nouveau et recherchez les chemins d'en-tête et si vous obtenez maintenant le !
chemin de la bibliothèque, par exemple
! ./bits/stdc++.h.gch
....