from the standard of C++ it should be called when the library was load, right?
No. Dynamic initialisation of an object with static storage duration is guaranteed to happen before execution of any function defined in the same translation unit. If there are no such functions, or your program never calls them, then there's no guarantee that it will ever be initialised.
I put another static int value using the same way, it could be initialized. but the class constructor is not called , very strange.
An int
variable is initialised statically, before the program starts, as long as its initialiser is constant.
is there any compile option will influence the variable ?
Not that I know of, but I'm not familiar with your platform. You could give yourself more control over the object's creation by scoping it within a function:
static Test & test() {
static Test test;
return test;
}
Now it is guaranteed to be initialised the first time the function is called. Of course, you'll need to remember to call it at some point.