When trying to test an application with a build from sources the startup via squishserver fails with the following error on the ARM platform:
/path/to/aut: symbol lookup error: /path/to/squish/lib/libsquishqtpre.so: undefined symbol: __sync_fetch_and_add_4
Possible Cause and Suggested Solution¶
__sync_fetch_and_add (and others) are only implemented in the static
libgcc library. When linking Squish's libraries against the shared
gcc_s library these symbols will be missing. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46563 for a discussion of the problem.
A quick workaround can be achieved by patching Squish's build scripts to have
-lgcc added to the link commands for each library. A more convenient and permanent fix for this toolchain problem: replace the
libgcc_s.so symlink with a linker script (plain text file) with the following content:
/* GNU ld script Use the shared library, but some functions are only in the static library. */ GROUP ( libgcc_s.so.1 libgcc.a )
This will make the linker pull in both the shared and static library when creating the binaries.