g++, статическая инициализация и -nostdlib

Компиляция/связывание с -nostdlib, по-видимому, предотвращает статическую инициализацию, даже если я добавляю свои собственные crti.s и crtn.s с разделами .init/.fini.

Существуют ли обходные пути, позволяющие заставить g++ генерировать статический код инициализации, который вставляется в .initили который я могу вызвать вручную?

Это то, что я пробовал:

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сам по себе включает статический код инициализации и вызов, но заставляет использовать libc-_start/_init.

-nodefaultlibs -nostartfilesпозволяет мне использовать мой собственный _start / _init, но не включает код или вызов статической инициализации.

12
задан Will Ness 21 March 2014 в 20:37
поделиться