我已将BSD许可库中的一些源文件包含到我的程序中。我没有注意到这个签名的功能:
class SomeClass {
...
private:
static void initializeFunc() __attribute__ ((__constructor__));
....
};
从this other stackoverflow question开始,似乎__constructor__应该在运行的二进制文件加载库时调用initializeFunc。当然在我的情况下,源代码被编译成二进制文件,所以它不被称为库。
现在,我的组织中的其他人注意到,从一个oprofile开始,即使SomeClass从未被实例化或调用,初始化函数也会被调用数千次。我不明白这种行为。可能我应该删除该属性并直接从main调用initializeFunc。但是为什么在我的情况下它不是被称为一次?有人可以帮我理解这里发生了什么吗?