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 Дилян Палаузов <dilyan.palauzov@xxxxxxxxx> ---------
Date: Fri, 10 Feb 2012 02:29:24 +0100
From: Дилян Палаузов <dilyan.palauzov@xxxxxxxxx>
Subject: 1.7.9, libcharset missing from EXTLIBS
To: git@xxxxxxxxxxxxxxx
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='<openssl/sha.h>' -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 Дилян Палаузов <dilyan.palauzov@xxxxxxxxx> -----
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html