tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: dlopen(3) and symbol conflicts



On Thu, Mar 19, 2015 at 06:30:44PM +0000, Valery Ushakov wrote:
 > > On Thu, Mar 19, 2015 at 09:44:12AM -0400, Greg Troxel wrote:
 > >> My not-really-thinking reaction is that having a function in any user
 > >> program that has the same name as a function in libc is asking for
 > >> trouble and should be avoided.
 > > 
 > > This is why libc symbol are weaks and are meant to be overriden by 
 > > the ones with same names from user libraries and programs.
 > > 
 > > In the case I face, the problem is with uuid_compare. NetBSD and Linux 
 > > have source and binary incompatible versions. A program like glusterfs 
 > > that uses UUID can work this around by providing its own implementation
 > > (which is the Linux version). The result is that a uuid_compare() call
 > > in glusterfs goes to libglusterfs's uuid_compare() and not libc 
 > > uuid_compare(). It works fine for any program linked with -lglusterfs
 > > because libc symbols are weak.
 > 
 > Uhm, uuid_compare() is not weak, is it?
 > 
 > $ readelf -a /usr/lib/libc.a | grep uuid_compare
 > File: /usr/lib/libc.a(uuid_compare.o)
 >      1: 00000000     0 FILE    LOCAL  DEFAULT  ABS uuid_compare.c
 >      8: 00000000   272 FUNC    GLOBAL DEFAULT    1 uuid_compare
 > 
 > $ readelf -aD /lib/libc.so | grep uuid_compare
 >  2399 824: 00030d74   300 FUNC    GLOBAL DEFAULT   7 uuid_compare

Inasmuch as it's not a Standard C function, that'd be a bug.

-- 
David A. Holland
dholland%netbsd.org@localhost


Home | Main Index | Thread Index | Old Index