Comment utiliser plusieurs fichiers sources pour créer un seul fichier objet avec gcc
Je suis en utilisant le -c option avec g++ pour créer un tas de fichiers de l'objet, et c'est seulement pour me permettre de spécifier un fichier source pour chaque fichier de l'objet. Je veux avoir plusieurs fichiers à intégrer certains d'entre eux. Est-il possible de faire cela?
source d'informationauteur David | 2011-06-27
Vous devez vous connecter pour publier un commentaire.
D'autres ont mentionné archivemais une autre option est L'unité s'appuie.
Au lieu de:
De créer une "unité fichier"
Puis
Cela a aussi l'avantage de la rapidité de compilation et la liaison dans de nombreux cas (parce que les en-têtes utilisés par les deux
file1.cpp
etfile2.cpp
sont uniquement analysée une fois). Cependant, si vous mettez trop de fichiers dans une seule unité, alors vous verrez que vous avez besoin de reconstruire plus de sources que vous voulez, si vous avez besoin de l'essayer et de trouver un équilibre.Vous pouvez utiliser
ld -r
pour combiner les objets tout en conservant la relocalisation de l'information et de quitter les constructeurs en suspens:Vous pouvez créer
archive
qui est un ensemble de fichiers de l'objet.Donc, effectivement, vous avez combiné
file1.cpp
etfile2.cpp
enmylib.a
.Vous pouvez utiliser le ar commande pour créer une archive à l'utilisation de votre programme.
À l'aide de la solution de Peter Alexander est le principal qui vient à l'esprit.
Mais, garder à l'esprit qu'en utilisant cette méthode, vous aurez à la compilation de l'ensemble des fichiers sources à chaque fois. Lorsque votre projet prend de l'ampleur, le temps de compilation peut devenir une douleur.
En outre, la compilation de plusieurs fichiers sur leur propre de permettre l'utilisation des différents cœurs de Processeurs modernes: chaque fichier source sera compilé dans son propre processus, à pleine vitesse. Ne pas sous-utiliser la puissance de la multi-cœurs.
Je sais que vous vous posez sur la façon de les combiner .rpc fichiers en un seul fichier de l'objet. Je suppose que votre objectif pour ce faire est de lier l'objet à un moment plus tard avec d'autres fichiers de l'objet. Si c'est le cas, vous pourriez être en mesure d'utiliser un statique ou dynamique de la bibliothèque la place. Pour atteindre vos objectifs, je suggère la bibliothèque dynamique puisque vous pouvez le faire une seule compiler et lier sauter l'étape de la génération de fichiers d'objets tout à fait. À l'aide d'une commande telle que
g++ -shared -fpic file1.cpp file2.cpp file3.cpp -o libtest.so
vous pouvez combiner votre .rpc fichiers qui ont besoin de combiner dans les bibliothèques. Pour compiler la bibliothèque(s) avec vos fichiers d'objet à utiliser une commande telle queg++ -ltest individual1.o individual2.o individual3.o -o myexecutable
. Dans cette dernière étape de liaison je supposelibtest.so
est dans votre répertoire courant. Si elle n'est pas dans votre répertoire courant ajouter un-L
drapeau et le répertoirelibtest.so
.La seule solution que je connaisse est de créer un fichier C++, ce qui inclut tous les fichiers que vous souhaitez compiler, et de les compiler. Une assez mauvaise solution, à mon avis; en règle générale, vous souhaitez augmenter la granularité des fichiers de l'objet, non pas de la réduire.
La vraie question, je suppose, est-ce que vous essayez d'atteindre. Pourquoi voulez-vous qu'un seul fichier de l'objet?
Nous utilisons l'option-o pour créer un fichier objet...... Par Défaut lorsque l'on compile le fichier à l'aide de gcc ou g++ - nous obtenir de fichier de l'objet nommé.mais on peut changer son nom.... utilisation ci-dessous pour compiler le fichier
gcc nom de fichier.c -o NewFilename.hors
pour exécuter le fichier, vous pouvez utiliser ./NewFilename.hors