Я только что прочитал разделы init и fini в файлах ELF и дал ему попробовать:
#include <stdio.h>
int main(){
puts("main");
return 0;
}
void init(){
puts("init");
}
void fini(){
puts("fini");
}
Если я выполняю gcc -Wl,-init,init -Wl,-fini,fini foo.c
и запускаю результат, часть "init" не печатается:
$ ./a.out
main
fini
Не запущена ли часть init, или она не может каким-то образом напечатать?
Есть ли какая-либо "официальная" документация об элементах init/fini?
man ld
говорит:
-init=name
When creating an ELF executable or shared object, call
NAME when the executable or shared object is loaded, by
setting DT_INIT to the address of the function. By
default, the linker uses "_init" as the function to call.
Не означает ли это, что достаточно назвать функцию init _init
? (Если я gcc жалуется на несколько определений.)