编译/链接 with-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,但不包括代码或调用静态初始化。