http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58056
Bug ID: 58056 Summary: ld segfaults when "-undefined dynamic_lookup" is set Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: freget at googlemail dot com Created attachment 30588 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30588&action=edit Object file causing the error I'm using g++ 4.8.1 on OS X with the following configuration: Ziel: x86_64-apple-darwin12.4.0 Konfiguriert mit: ../configure --build=x86_64-apple-darwin12.4.0 --prefix=/usr/local/Cellar/gcc48/4.8.1/gcc --datarootdir=/usr/local/Cellar/gcc48/4.8.1/share --bindir=/usr/local/Cellar/gcc48/4.8.1/bin --enable-languages=c,c++,fortran,java,objc,obj-c++ --program-suffix=-4.8 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-cloog=/usr/local/opt/cloog --with-isl=/usr/local/opt/isl --with-system-zlib --enable-libstdcxx-time=yes --enable-stage1-checking --enable-checking=release --enable-lto --disable-werror --enable-plugin --with-ecj-jar=/usr/local/opt/ecj/share/java/ecj.jar --disable-multilib Thread-Modell: posix gcc-Version 4.8.1 (GCC) Using the (faulty) object file attached, the following call causes a segfault: > g++-4.8 -std=c++0x -g -dynamiclib -undefined dynamic_lookup -o > output.dylib Notifications.cpp.o collect2: Fehler: ld mit Signal 11 [Segmentation fault: 11] beendet However, once I link without "-undefined dynamic_lookup", I get a meaningful error description: > g++-4.8 -std=c++0x -g -dynamiclib -o output.dylib Notifications.cpp.o Undefined symbols for architecture x86_64: "libsoda::(anonymous namespace)::CustomOutputBuffer::~CustomOutputBuffer()", referenced from: libsoda::(anonymous namespace)::CustomWarnBuffer::~CustomWarnBuffer() in Notifications.cpp.o libsoda::(anonymous namespace)::CustomErrBuffer::~CustomErrBuffer() in Notifications.cpp.o libsoda::(anonymous namespace)::CustomPrintBuffer::~CustomPrintBuffer() in Notifications.cpp.o "vtable for libsoda::(anonymous namespace)::CustomOutputBuffer", referenced from: libsoda::(anonymous namespace)::CustomOutputBuffer::CustomOutputBuffer(unsigned long) in Notifications.cpp.o NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. "_elog_finish", referenced from: libsoda::(anonymous namespace)::CustomPrintBuffer::printToUser(char*) in Notifications.cpp.o libsoda::(anonymous namespace)::CustomErrBuffer::printToUser(char*) in Notifications.cpp.o libsoda::(anonymous namespace)::CustomWarnBuffer::printToUser(char*) in Notifications.cpp.o libsoda::(anonymous namespace)::DefaultHandler(char const*, char const*, char const*, int) in Notifications.cpp.o "_elog_start", referenced from: libsoda::(anonymous namespace)::CustomPrintBuffer::printToUser(char*) in Notifications.cpp.o libsoda::(anonymous namespace)::CustomErrBuffer::printToUser(char*) in Notifications.cpp.o libsoda::(anonymous namespace)::CustomWarnBuffer::printToUser(char*) in Notifications.cpp.o libsoda::(anonymous namespace)::DefaultHandler(char const*, char const*, char const*, int) in Notifications.cpp.o ld: symbol(s) not found for architecture x86_64 collect2: Fehler: ld gab 1 als Ende-Status zurück This is something I can work with. Debugging with the only output beeing a segfault is not that easy. Not that the example above was stripped down as much as possible and will never compile successfully in this configuration.