в OS X, статические объекты в разных динамических библиотеках будут разными экземплярами. В Windows и Linux они будут вести себя как положено.
Единственный гарантированный способ иметь уникальные статические объекты в процессе на разных платформах - это использовать идиому статической локальной переменной в экспортируемых функциях, то есть вместо этого:
foo.h
static Foo* global_instance;
foo.cpp
static Foo* global_instance = new Foo();
вам нужно сделать это:
foo.h
Foo* get_global_instance();
foo.cpp
Foo* get_global_instance() {
static Foo instance;
return &instance;
}