pkgsrc-Bugs archive

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

pkg/36568: [patch] devel/glib2 linker error on Darwin/OS X with certain linker flags



>Number:         36568
>Category:       pkg
>Synopsis:       [patch] devel/glib2 linker error on Darwin/OS X with certain 
>linker flags
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Jun 27 19:45:00 +0000 2007
>Originator:     Idar Tollefsen
>Release:        glib2-2.12.12
>Organization:
Performance Design
>Environment:
Darwin fulcrum.performancedesign.no 8.10.0 Darwin Kernel Version 8.10.0: Wed 
May 23 16:50:59 PDT 2007; root:xnu-792.21.3~1/RELEASE_PPC Power Macintosh 
powerpc
>Description:
If "-dead_strip" is used as a linker flag, devel/glib2 fails during linking on 
Darwin/OS X with messages like "ld: .libs/gatomic.o relocation overflow for 
relocation entry 0 in section (__TEXT,__text) (displacement too large)". Here's 
the output:

 gcc -DHAVE_CONFIG_H -I. -I.. -DG_LOG_DOMAIN=\"GLib\" -DG_DISABLE_CAST_CHECKS 
-DG_DISABLE_DEPRECATED -DGLIB_COMPILATION -DNDEBUG -DPREFIX=\"/usr/pkg\" 
-DPKGLOCALEDIR=\"share\" -DPKG_SYSCONFDIR=\"/usr/pkg/etc\" -no-cpp-precomp 
-I/usr/pkg/pkgsrc/devel/glib2/work/.buildlink/include -D_REENTRANT -O2 -Wall 
-MT gspawn.lo -MD -MP -MF .deps/gspawn.Tpo -c gspawn.c -o gspawn.o >/dev/null 
2>&1
/bin/sh ../libtool --mode=link gcc  -DNDEBUG -O2 -I/usr/pkg/include 
-I/usr/include -Wall  -Wl,-x -Wl,-dead_strip -L/usr/pkg/lib -L/usr/lib -o 
libglib-2.0.la -rpath /usr/pkg/lib  -version-info 1200:12:1200 -export-dynamic  
-export-symbols-regex "^[^_].*" garray.lo gasyncqueue.lo gatomic.lo 
gbacktrace.lo gbase64.lo gbookmarkfile.lo gcache.lo gcompletion.lo gconvert.lo 
gdataset.lo gdate.lo gdir.lo gerror.lo gfileutils.lo ghash.lo ghook.lo 
giochannel.lo gkeyfile.lo glist.lo gmain.lo gmappedfile.lo gmarkup.lo gmem.lo 
gmessages.lo gnode.lo goption.lo gpattern.lo gprimes.lo gqsort.lo gqueue.lo 
grel.lo grand.lo gscanner.lo gshell.lo gslice.lo gslist.lo gstdio.lo 
gstrfuncs.lo gstring.lo gthread.lo gthreadpool.lo gtimer.lo gtree.lo 
guniprop.lo gutf8.lo gunibreak.lo gunicollate.lo gunidecomp.lo gutils.lo 
gprintf.lo libcharset/libcharset.la  giounix.lo gspawn.lo  -liconv   -lintl  
generating symbol list for `libglib-2.0.la'
nm  .libs/garray.o .libs/gasyncqueue.o .libs/gatomic.o .libs/gbacktrace.o 
.libs/gbase64.o .libs/gbookmarkfile.o .libs/gcache.o .libs/gcompletion.o 
.libs/gconvert.o .libs/gdataset.o .libs/gdate.o .libs/gdir.o .libs/gerror.o 
.libs/gfileutils.o .libs/ghash.o .libs/ghook.o .libs/giochannel.o 
.libs/gkeyfile.o .libs/glist.o .libs/gmain.o .libs/gmappedfile.o 
.libs/gmarkup.o .libs/gmem.o .libs/gmessages.o .libs/gnode.o .libs/goption.o 
.libs/gpattern.o .libs/gprimes.o .libs/gqsort.o .libs/gqueue.o .libs/grel.o 
.libs/grand.o .libs/gscanner.o .libs/gshell.o .libs/gslice.o .libs/gslist.o 
.libs/gstdio.o .libs/gstrfuncs.o .libs/gstring.o .libs/gthread.o 
.libs/gthreadpool.o .libs/gtimer.o .libs/gtree.o .libs/guniprop.o .libs/gutf8.o 
.libs/gunibreak.o .libs/gunicollate.o .libs/gunidecomp.o .libs/gutils.o 
.libs/gprintf.o .libs/giounix.o .libs/gspawn.o  libcharset/.libs/libcharset.a | 
sed -n -e 's/^.*[        ]\([BCDEGRST][BCDEGRST]*\)[     ][      
]*_\([_A-Za-z][_A-Za-z0-9]*\)$/\1 _\2 \2/p' |
  /usr/bin/sed 's/.* //' | sort | uniq > .libs/libglib-2.0.exp
/usr/bin/egrep -e "^[^_].*" ".libs/libglib-2.0.exp" > ".libs/libglib-2.0.expT"
mv -f ".libs/libglib-2.0.expT" ".libs/libglib-2.0.exp"
rm -fr .libs/libglib-2.0.lax
mkdir .libs/libglib-2.0.lax
rm -fr .libs/libglib-2.0.lax/libcharset.a
mkdir .libs/libglib-2.0.lax/libcharset.a
Extracting 
/usr/pkg/pkgsrc/devel/glib2/work/glib-2.12.12/glib/libcharset/.libs/libcharset.a
(cd .libs/libglib-2.0.lax/libcharset.a && ar x 
/usr/pkg/pkgsrc/devel/glib2/work/glib-2.12.12/glib/libcharset/.libs/libcharset.a)
sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < .libs/libglib-2.0.exp > 
.libs/libglib-2.0-symbols.expsym
gcc -dynamiclib ${wl}-undefined ${wl}dynamic_lookup -o 
.libs/libglib-2.0.0.1200.12.dylib  .libs/garray.o .libs/gasyncqueue.o 
.libs/gatomic.o .libs/gbacktrace.o .libs/gbase64.o .libs/gbookmarkfile.o 
.libs/gcache.o .libs/gcompletion.o .libs/gconvert.o .libs/gdataset.o 
.libs/gdate.o .libs/gdir.o .libs/gerror.o .libs/gfileutils.o .libs/ghash.o 
.libs/ghook.o .libs/giochannel.o .libs/gkeyfile.o .libs/glist.o .libs/gmain.o 
.libs/gmappedfile.o .libs/gmarkup.o .libs/gmem.o .libs/gmessages.o 
.libs/gnode.o .libs/goption.o .libs/gpattern.o .libs/gprimes.o .libs/gqsort.o 
.libs/gqueue.o .libs/grel.o .libs/grand.o .libs/gscanner.o .libs/gshell.o 
.libs/gslice.o .libs/gslist.o .libs/gstdio.o .libs/gstrfuncs.o .libs/gstring.o 
.libs/gthread.o .libs/gthreadpool.o .libs/gtimer.o .libs/gtree.o 
.libs/guniprop.o .libs/gutf8.o .libs/gunibreak.o .libs/gunicollate.o 
.libs/gunidecomp.o .libs/gutils.o .libs/gprintf.o .libs/giounix.o 
.libs/gspawn.o  .libs/libglib-2.0.lax/libcharset.a/localcharset.o   -L/u
 sr/pkg/pkgsrc/devel/glib2/work/.buildlink/lib -lc /usr/lib/libiconv.dylib 
/usr/pkg/pkgsrc/devel/glib2/work/.buildlink/lib/libintl.dylib 
/usr/lib/libc.dylib  -Wl,-x -Wl,-dead_strip -install_name  
/usr/pkg/lib/libglib-2.0.0.dylib -Wl,-compatibility_version -Wl,1201 
-Wl,-current_version -Wl,1201.12
ld: warning multiple definitions of symbol _locale_charset
/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/../../../libiconv.dylib(localcharset.o)
 definition of _locale_charset
/usr/pkg/pkgsrc/devel/glib2/work/.buildlink/lib/libintl.dylib(localcharset.o) 
definition of _locale_charset
ld: .libs/gatomic.o relocation overflow for relocation entry 0 in section 
(__TEXT,__text) (displacement too large)
ld: .libs/gatomic.o relocation overflow for relocation entry 1 in section 
(__TEXT,__text) (displacement too large)
ld: .libs/gatomic.o relocation overflow for relocation entry 2 in section 
(__TEXT,__text) (displacement too large)
ld: .libs/gatomic.o relocation overflow for relocation entry 3 in section 
(__TEXT,__text) (displacement too large)
/usr/bin/libtool: internal link edit command failed
gnumake[4]: *** [libglib-2.0.la] Error 1
gnumake[3]: *** [all-recursive] Error 1
gnumake[2]: *** [all] Error 2
gnumake[1]: *** [all-recursive] Error 1
gnumake: *** [all] Error 2
*** Error code 2

Stop.
bmake: stopped in /usr/pkg/pkgsrc/devel/glib2
*** Error code 1

Stop.
bmake: stopped in /usr/pkg/pkgsrc/devel/glib2

>How-To-Repeat:
On Darwin/OS X, add "-Wl,-dead_strip" to LDFLAGS in mk.conf. Then try to build 
devel/glib2.
>Fix:
Remove -dead_strip from LDFLAGS. Here's a patch against devel/glib2/Makefile. 
It also adds xgettext to USE_TOOLS to pull this into the build tree as glib2 
uses it as it uses msgfmt that's allready part of USE_TOOLS.

--- Makefile.orig       2007-06-24 14:06:44.000000000 +0200
+++ Makefile    2007-06-27 19:18:39.000000000 +0200
@@ -16,7 +16,7 @@
 PKG_DESTDIR_SUPPORT=   user-destdir
 
 USE_PKGLOCALEDIR=      yes
-USE_TOOLS+=            gmake msgfmt perl:run pkg-config
+USE_TOOLS+=            gmake msgfmt xgettext perl:run pkg-config
 USE_LANGUAGES=         c c++ c99
 USE_LIBTOOL=           yes
 TEST_TARGET=           check
@@ -71,6 +71,10 @@
 CONFIGURE_ENV+=                gt_cv_c_wchar_t=no
 .endif
 
+.if ${OPSYS} == "Darwin" && ${PKGSRC_COMPILER} == "gcc"
+LDFLAGS:=      ${LDFLAGS:N-Wl,-dead_strip}
+.endif
+
 # Handle directories shared with devel/glib.
 PRINT_PLIST_AWK+=      /^@dirrm include\/glib$$/ \
                                { print "@unexec $${RMDIR} %D/" $$2 \




Home | Main Index | Thread Index | Old Index