It seems that original limitation isn't clear or sufficient For a sample:
// f.c int g; void foo(void) { g = 1; } compile with `gcc -shared -fPIC -Wl,-soname,f.so,-Map,f.map -o f.so f.c', according to f.map, offsetof(g - foo) in library is 0x1550 - 0x3cc = 0x1184, however let's load the library to memory, offsetof(g - foo) in memory is 0x2c2550 - 0x2c13cc = 0x1184. That's the key of my idea! Target OS need support --segment-model=elf-layout. In fact, Linux only simply maps the library to memory, using segment model *defined* in ELF! So as the previous mail, offsetof(C - A) is const!