g++, initialisation statique et -nostdlib
Compilation /liaison avec -nostdlib
semble empêcher l'initialisation statique, même si je ajouter mes propres crti.s et crtn.s avec .init
/.fini
sections.
Sont là des solutions de contournement pour faire de g++ générer de l'électricité statique de code d'initialisation qui est inséré dans .init
ou que je peux appeler manuellement?
C'est ce que j'ai essayé:
g++ -o test.o -c -fno-use-cxa-atexit test.cc # has _start (entry point)
# that calls _init and _main
as -o crti.o crti.s # has _init in section .init
as -o crtn.o crtn.s
g++ -o test ./crti.o test.o -nodefaultlibs -nostartfiles ./crtn.o
-nodefaultlibs
seul comprend initialisation statique de code et d'appel, mais les forces de l'utilisation de la libc-_start/_init.
-nodefaultlibs -nostartfiles
me permet d'utiliser mon propre _start /_init, mais ne comprend pas le code ou l'appel d'initialisation statique.
Essayez cette
J'ai essayé
Je ne suis pas très versé en C++, donc je ne suis pas d'obtenir ce que vous voulez dire par "mais encore besoin de la statique des constructeurs pour obtenir appelés"? Pouvez-vous me dire quelques exemples. Je pensais bibliothèques statiques tout le temps
J'ai plusieurs classes de modèles qui ont statique des membres de la classe qui se construit / initialisé au démarrage automatiquement avant
Voir, ensuite, permet d'aller étape par étape, essayez d'abord UNIQUEMENT AVEC
g++ -o test ./crti.o ./crtn.o test.o -Wl, -nodefaultlibs -nostartfiles
Et en regardant votre utilisation je sens que seuls vos fichiers de démarrage pour être inclus, et vous semblez être OK avec les autres bibliothèques de la bibliothèque standard?J'ai essayé
-Wl,-nodefaultlibs -Wl,-nostartfiles
, mais alors libc-_init est inclus par le compilateur. L'utilisation est pour IBM Cellule SPU - j'ai besoin de mon propre code de démarrage pour mettre tout en place et de ne pas utiliser les fonctions de la libc, mais encore besoin de la statique des constructeurs pour obtenir de l'appelé.Je ne suis pas très versé en C++, donc je ne suis pas d'obtenir ce que vous voulez dire par "mais encore besoin de la statique des constructeurs pour obtenir appelés"? Pouvez-vous me dire quelques exemples. Je pensais bibliothèques statiques tout le temps
J'ai plusieurs classes de modèles qui ont statique des membres de la classe qui se construit / initialisé au démarrage automatiquement avant
main
est appelé. Comme le compilateur décide de modèle d'instanciations d'utilisation, il n'est pas facile d'appeler les constructeurs explicitement. C'est pourquoi j'ai besoin de l'initialisation statique de code pour être inclus.Voir, ensuite, permet d'aller étape par étape, essayez d'abord UNIQUEMENT AVEC
-nostartfiles
de sorte que vous devez d'abord résoudre vos fichiers de démarrage de problème. Une fois qu'il commence à comprendre vos fichiers de démarrage puis vous nous dire ce que précisément vous voulez éviter d'inclure, puis nous allons prendre à partir de là
OriginalL'auteur Thomas | 2012-04-12
Vous devez vous connecter pour publier un commentaire.
De gcc linker docs,
-nostdlib
Donc d'utiliser,
-nodefaultlibs
Ne pas utiliser le système standard des bibliothèques lors de la liaison. Seulement les bibliothèques que vous spécifiez sera transmis à l'éditeur de liens, les options de spécification de liaison des bibliothèques système, tels que -static-libgcc ou -partagé-libgcc, sera ignoré. Le standard des fichiers de démarrage sont utilisés normalement, sauf si l'-nostartfiles est utilisé. Le compilateur peut générer des appels à memcmp, memset, memcpy et memmove. Ces entrées sont généralement résolus par des entrées dans la libc. Ces points d'entrée doivent être fournis par le biais d'un autre mécanisme lorsque cette option est spécifiée.
Aussi essayer,
Avez-vous utilisé
-nostartfiles
?Oui, j'ai essayé -nostartfiles, mais là encore, l'éditeur de liens ne comprend pas le code et d'appel statique intialization dans mon .init section.
êtes-vous dire à l'éditeur de liens de votre chemin de code?
J'ai édité la question afin de montrer ce que j'ai fait.
OriginalL'auteur Pavan Manjunath