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