This fails with gold or LLD linkers, but works fine with bfd. And it only fails when a static library is involved. (Using objects directly is fine)
(lldb) bt
* thread #1, name = 'app', stop reason = signal SIGSEGV
frame #0: 0x0000000000000000
* frame #1: 0x00000000002012e2 app`main + 34
frame #2: 0x0000000000201095 app`_start(ap=<unavailable>, cleanup=<unav
ailable>) at crt1.c:74
(lldb) p lib_thing_impl
(void *) $0 = 0x0000000000000000
(lldb) p lib_thing_instance
(void *) $1 = 0x0000000000204008
(lldb) p *lib_thing_instance
(lldb)