I am seeing undefined symbols when trying to link shared libraries with a program on Redhat Linux.
We are running Linux kernel 3.10.0, gcc 4.8.2 with libc-2.17.so, and libblkid 2.23.2
When I build the application I am writing I get two undefined symbols from libblkid: memcpy@GLIBC_2.14
and secure_getenv@GLIBC_2.17
. (A very similar build works on other machines, ostensibly using the same versions of everything).
Note, for secure_getenv
libblkid wants the same version as the libc library itself.
Looking at the symbols defined in libc-2.17.so I find memcpy@@GLIBC_2.14
, memcpy@GLIBC_2.2.5
, secure_getenv
, and secure_getenv@GLIBC_2.2.5
. According to my understanding the double @
in the first memcpy
version is simply supposed to mark it as the default version. And, for some reason even in this libc with versioned symbols the first secure_getenv
appears to be unversioned.
So, why does a requirement for memcpy@GLIBC_2.14
not match the defaulted memcpy@@GLIBC_2.14
?
And logically I would expect the base version of secure_getenv
in libc-2.17 to match a requirement for version 2.17.
So, what is going on here? What is making it fail on my development machine and not others? How do I fix this? (As the make works on other machines this appears to be something specific to my build environment, but what?)