gcc-4.1 vs gcc-4.3 and multiple "tolower"/"toupper" refs

Robert P. J. Day rpjday at crashcourse.ca
Sun Feb 22 12:19:01 UTC 2009


   as a followup to an earlier post (which i can't continue the thread  
on since i'm posting this from a browser, sorry), here's the error i'm  
getting when i use a gcc-4.3 coldfire toolchain to compile  
busybox-1.7.2:


Failed: m68k-linux-gnu-gcc -o busybox_unstripped -Wl,-Map  
-Wl,busybox_unstripped.map -Wl,--warn-common -Wl,--sort-common  
-Wl,--start-group applets/built-in.o archival/lib.a  
archival/libunarchive/lib.a console-tools/lib.a coreutils/lib.a  
coreutils/libcoreutils/lib.a debianutils/lib.a e2fsprogs/lib.a  
editors/lib.a findutils/lib.a init/lib.a ipsvd/lib.a libbb/lib.a  
libpwdgrp/lib.a loginutils/lib.a miscutils/lib.a modutils/lib.a  
networking/lib.a networking/libiproute/lib.a networking/udhcp/lib.a  
procps/lib.a runit/lib.a selinux/lib.a shell/lib.a sysklogd/lib.a  
util-linux/lib.a archival/built-in.o archival/libunarchive/built-in.o  
console-tools/built-in.o coreutils/built-in.o  
coreutils/libcoreutils/built-in.o debianutils/built-in.o  
e2fsprogs/built-in.o editors/built-in.o findutils/built-in.o  
init/built-in.o ipsvd/built-in.o libbb/built-in.o libpwdgrp/built-in.o  
loginutils/built-in.o miscutils/built-in.o modutils/built-in.o  
networking/built-in.o networking/libiproute/built-in.o  
networking/udhcp/built-in.o procps/built-in.o runit/built-in.o  
selinux/built-in.o shell/built-in.o sysklogd/built-in.o  
util-linux/built-in.o -Wl,--end-group -Wl,--start-group  
-Wl,--start-group -lcrypt -lm -Wl,--end-group -Wl,--end-group
init/lib.a(init.o): In function `toupper':
init.c:(.text.toupper+0x0): multiple definition of `toupper'
applets/built-in.o:(.text.toupper+0x0): first defined here
init/lib.a(init.o): In function `tolower':
init.c:(.text.tolower+0x0): multiple definition of `tolower'
applets/built-in.o:(.text.tolower+0x0): first defined here
... etc etc lots more of these, all related to tolower and toupper ...

   ok, let's see what's happening here:

$ nm applets/built-in.o
...
00000000 T tolower
00000000 T toupper
...

   ok, so it appears that applets/built-in.o does indeed define those  
text symbols.  and:


$ nm init/init.o
...
00000000 T tolower
00000000 T toupper
...


   but that's using the newer gcc-4.3 toolchain.  if i clean and  
rebuild using the earlier gcc-4.1 coldfile toolchain, the build works  
and:

$ nm applets/built-in.o
... no definition of tolower or toupper ...

$ nm init/init.o
... here either ...

   i'm confused ... why should upgrading my toolchain suddenly result  
in the definition of text symbols "tolower" and "toupper" in various  
object files, causing a link error?

rday





More information about the busybox mailing list