2014-08-28 101 views
3

GOLD共享库构造函数和析构函数是否定义为__attribute__((constructor))__attribute__((destructor)),保证只运行一次?文件似乎暗示它们将至少运行一次,但不会提到任何关于不止一次的事情。是__attribute __((构造函数))保证只被调用一次?

换句话说,如果我做了必须做一次构造函数的操作,我需要保护它,像这样:

static gboolean constructor_has_run = FALSE; 
if(!constructor_has_run) { 
    do_operation(); 
    constructor_has_run = TRUE; 
} 
+0

在实践中,我认为这始终是有保证的,但它会很好,如果GCC证明这更好。 – 2014-08-28 00:44:07

+0

是的 - 构造函数在main()和析构函数被调用一次之前调用一次。 – 2014-08-28 01:18:32

+1

明显的情况下,但与'dlopen'它变得少得多。 – keltar 2014-08-28 05:42:35

回答