From: Dilyan Palauzov Date: Fri, 10 Feb 2012 19:52:42 GMT Subject: Re: 1.7.9, libcharset missing from EXTLIBS Message-ID: <20120210205242.Horde.Ip6kLu3yGeFPNXWKXsdW3wA@webmail.aegee.org> In-Reply-To: <7vipjer0yn.fsf@alter.siamese.dyndns.org> Hello, on my system locale_charset is included in libiconv as local symbol and thus linking with -liconv is not sufficient. nm /usr/lib64/libiconv.so.2.5.1 | grep locale 0000000000012694 t locale_charset whereas in libcharset the symbol is global: nm /usr/lib64/libcharset.so.1 |grep locale 0000000000000c50 T locale_charset looking at libiconv-1.4/lib/Makefile.in there is written SOURCES = $(srcdir)/iconv.c $(srcdir)/../libcharset/lib/localcharset.c $(srcdir)/relocatable.c OBJECTS = iconv.lo localcharset.lo relocatable.lo $(OBJECTS_EXP_@WOE32DLL@) $(OBJECTS_RES_@WOE32@) libiconv.la : $(OBJECTS) $(LIBTOOL_LINK) $(CC) $(LDFLAGS) $(CFLAGS) -o libiconv.la -rpath $(libdir) -version-info $(LIBICONV_VERSION_INFO) -no-undefined $(OBJECTS) this means, that libiconv.la includes $(OBJECTS) and thus libiconv-1.4/libcharset/lib/localecharset.c . In libiconv-1.4/libcharset/lib/localecharset.c is written #ifdef STATIC STATIC #endif const char * locale_charset (void) { ...} and the preliminary localcharset.o still has locale_charset as global symbol: libiconv-1.14/lib/.libs # nm localcharset.o |grep locale 0000000000000000 T locale_charset Digging further, in libiconv-1.4/include/iconv.h some functions are prefixed with LIBICONV_DLL_EXPORTED , which is the same as #define LIBICONV_DLL_EXPORTED __attribute__((__visibility__("default"))) , all the rest including locale_charset is compiled with __attribute__((__visibility__("hidden"))), and hence locale_charset is not exported from libiconv. Greetings Dilian ----- Message from Дилян Палаузов --------- Date: Fri, 10 Feb 2012 02:29:24 +0100 From: Дилян Палаузов Subject: 1.7.9, libcharset missing from EXTLIBS To: git@vger.kernel.org > Hello, > > git 1.7.9 makes use of libcharset and /Makefile contains: > > ifdef HAVE_LIBCHARSET_H > BASIC_CFLAGS += -DHAVE_LIBCHARSET_H > endif > > when building git-daemon., the compiler reports > make V=1 > cc -I. -DUSE_LIBPCRE -pthread -DHAVE_PATHS_H -DHAVE_LIBCHARSET_H > -DHAVE_DEV_TTY -DSHA1_HEADER='' -DNO_STRLCPY -o > git-daemon -L/usr/lib64 -L/lib64 daemon.o libgit.a xdiff/lib.a > -lpcre -lz -liconv -lcrypto -pthread > /tmp/ccvPEthi.ltrans0.ltrans.o: In function `main': > ccvPEthi.ltrans0.o:(.text.startup+0x59): undefined reference to > `locale_charset' > collect2: ld returned 1 exit status > make: *** [git-daemon] Error 1 > > > and the problem is, that libcharset is not used when linking. To > solve this, please replace the above extract from /Makefile with > > ifdef HAVE_LIBCHARSET_H > BASIC_CFLAGS += -DHAVE_LIBCHARSET_H > EXTLIBS += -lcharset > endif > > Със здраве > Дилян ----- End message from Дилян Палаузов -----