Here comes the output
main.cpp
#include <QDebug> #include <QLibrary> int main(int, char **) { QLibrary l("libshared"); qDebug() << l.load(); return 0; }shared.cpp
#include "shared.h" static Foo f; Foo::Foo() { int *a = 0; *a = 33; }shared.h
class Foo { public: Foo(); };
export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.4 export ASAN_OPTIONS=symbolize=1 g++ -shared -o libshared.so shared.cpp -g3 -fPIC g++ -fsanitize=address main.cpp -g3 -I /usr/include/qt4/QtCore/ \ -I /usr/include/qt4/ -lQtCoreAnd then we run it!
$ LD_LIBRARY_PATH=. ./a.out ASAN:SIGSEGV ================================================================= ==7048== ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f199c1326aa sp 0x7fff37e557c0 bp 0x7fff37e557c0 T0) AddressSanitizer can not provide additional info. #0 0x7f199c1326a9 in Foo::Foo() /home/tsdgeos/test/shared.cpp:8 #1 0x7f199c1326da in __static_initialization_and_destruction_0(int, int) /home/tsdgeos/test/shared.cpp:3 #2 0x7f199c1326ef in _GLOBAL__sub_I_shared.cpp /home/tsdgeos/test/shared.cpp:9 #3 0x7f19a132b139 (/lib64/ld-linux-x86-64.so.2+0x10139) #4 0x7f19a132b222 (/lib64/ld-linux-x86-64.so.2+0x10222) #5 0x7f19a132fc6f (/lib64/ld-linux-x86-64.so.2+0x14c6f) #6 0x7f19a132aff3 (/lib64/ld-linux-x86-64.so.2+0xfff3) #7 0x7f19a132f3ba (/lib64/ld-linux-x86-64.so.2+0x143ba) #8 0x7f199d1a602a (/lib/x86_64-linux-gnu/libdl.so.2+0x102a) #9 0x7f19a132aff3 (/lib64/ld-linux-x86-64.so.2+0xfff3) #10 0x7f199d1a662c (/lib/x86_64-linux-gnu/libdl.so.2+0x162c) #11 0x7f199d1a60c0 (/lib/x86_64-linux-gnu/libdl.so.2+0x10c0) #12 0x7f199e0156b7 (/usr/lib/x86_64-linux-gnu/libQtCore.so.4+0x16e6b7) #13 0x7f199e010599 (/usr/lib/x86_64-linux-gnu/libQtCore.so.4+0x169599) #14 0x4011c0 in main /home/tsdgeos/test/main.cpp:8 #15 0x7f199d5e8ec4 (/lib/x86_64-linux-gnu/libc.so.6+0x21ec4) #16 0x401078 in _start (/home/tsdgeos/test/a.out+0x401078) SUMMARY: AddressSanitizer: SEGV /home/tsdgeos/test/shared.cpp:8 Foo::Foo() ==7048== ABORTING
So it seems that "plugins are just libraries" applies here :)