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