Undefined reference errors occurr when linking in Insure++ symbols in Ubuntu

In Ubuntu, linking errors with Insure++ (undefined references of Insure++ symbols, see examples below) are caused by a change in the default behavior of the linker from previous versions of Ubuntu.

Error example: ".../Insure++/lib/libinsure.so: undefined reference to `Insure::Thread::startFunction()'"


This behavior occurs because Ubuntu linker, by default, attempts to optimize the symbols linked in. This means the linker will throw away symbols it deems unnecessary, such as the Insure++ libraries. However, these Insure++ libraries are required, as is proved by the linking error. The solution is to add the linker option "-Wl,--no-as-needed" to prevent the linker from automatically optimizing the link line.

In this example, let's assume the following.

OS : Ubuntu v12.04

Compiler : GCC v4.6.3

Insure++ v7.4.3

We would like to Instrument the following .c file with Insure++.


To compile the file with Insure++, perform the following command:

$ insure gcc -g message_rec.c

Once the compilation is completed, perform the following link command with Insure++:

$ insure gcc -g -o message_rec message_rec.o

IF a similar output results from the above link command:
.../Insure++/lib/libinsure.so: undefined reference to Insure::Thread::startFunction()' .../Insure++/lib/libinsure.so: undefined reference to Insure::NativeThread::newThread(Insure::Lock&)'
.../Insure++/lib/libinsure.so: undefined reference to Insure::Mutex::newMutex(Insure::ThisThread*, Insure::LibraryCall&)' .../Insure++/lib/libinsure.so: undefined reference to Insure::Thread::thisThread()'
.../Insure++/lib/libinsure.so: undefined reference to `Insure::Thread::fiberStartFunction()'
collect2: ld returned 1 exit status

THEN the option "-Wl,--no-as-needed" needs to be added to the link command:

$ insure gcc -g -o message_rec message_rec.o -Wl,--no-as-needed

This will tell the linker to use all the symbols and do not throw any of the symbols away. The link should no longer produce the same error.

Sign In or Register to comment.