Date: Wed, 13 Nov 2002 11:24:20 -0800 From: Jordan K Hubbard <jkh@queasyweasel.com> To: The Anarcat <anarcat@anarcat.ath.cx> Cc: libh@FreeBSD.ORG, Alexander Langer <alex@big.endian.de> Subject: Re: serious libh linking problems Message-ID: <820539DB-F73D-11D6-9957-000393BB9222@queasyweasel.com> In-Reply-To: <20021113042057.GC9054@lenny.anarcat.ath.cx>
next in thread | previous in thread | raw e-mail | index | archive | help
Well, it was just a guess, and I see you'd already guessed it. :-) Hmmm. This does appear to be a linker mystery, alright. What do John Polstra and David O'Brien have to say about this? - Jordan On Tuesday, November 12, 2002, at 08:20 PM, The Anarcat wrote: > Wow! Quick response! Yay! I'm very happy that you're there to help > Jordan. > > That's an interesting proposition. -l declaration order can have such > an effect? Let's see: > > g++31 -O -pipe -I../../include -I/usr/local/include/tcl8.3 > -L/usr/local/lib -L/usr/lib -o pkg_create pkg_create.o -ltcl83 -lh > -lhsysinstall -lhtcl -lhdatabase -lhfile > /usr/lib/libhsysinstall.so: undefined reference to > `LanguageInterface::LanguageInterface(bool)' > > g++31 -O -pipe -I../../include -I/usr/local/include/tcl8.3 > -L/usr/local/lib -L/usr/lib -o pkg_create pkg_create.o -ltcl83 > -lhsysinstall -lh -lhtcl -lhdatabase -lhfile > /usr/lib/libhsysinstall.so: undefined reference to > `LanguageInterface::LanguageInterface(bool)' > > g++31 -O -pipe -I../../include -I/usr/local/include/tcl8.3 > -L/usr/local/lib -L/usr/lib -o pkg_create pkg_create.o -ltcl83 -lhtcl > -lh -lhsysinstall -lhdatabase -lhfile > /usr/lib/libhsysinstall.so: undefined reference to > `LanguageInterface::LanguageInterface(bool)' > > g++31 -O -pipe -I../../include -I/usr/local/include/tcl8.3 > -L/usr/local/lib -L/usr/lib -o pkg_create pkg_create.o -ltcl83 -lhtcl > -lhsysinstall -lh -lhdatabase -lhfile > /usr/lib/libhsysinstall.so: undefined reference to > `LanguageInterface::LanguageInterface(bool)' > > I got tired of trying about then. :) Note that I tried that > before. I've been struggling with such problems in libh for a while > now. Note that tclh links properly. The tclh commandline is: > > gcc31 -pipe -g -I/usr/local/include/tcl8.3 -fpic -DPIC > -I/usr/home/anarcat/cvs-work/libh/bin/tclh/../../include -Wall > -static -o tclh.static tclh.o > -L/usr/home/anarcat/cvs-work/libh/compile/none -lhtcl -lh -lhtclfile > -lhfile -lhtcldisk -lhdisk -lhtclhui -lhui -lhtclsysinstall > -lhsysinstall -lhdatabase -ltcl83 -lm -L/usr/local/lib -lstdc++ > -ldisk -lfetch -lz -lcom_err -lssl -lcrypto -lm > > But tclh is statically linked. I've never been able to dynamically > link tclh. linking fails miserably again, but it's interesting to note > that it fails similarly: > > anarcat@lenny[~/libh/compile/none]% gcc31 -pipe -g > -I/usr/local/include/tcl8.3 -fpic -DPIC > -I/usr/home/anarcat/cvs-work/libh/bin/tclh/../../include -Wall -o > tclh tclh.o -L/usr/home/anarcat/cvs-work/libh/compile/none -lhtcl -lh > -lhtclfile -lhfile -lhtcldisk -lhdisk -lhtclhui -lhui > -lhtclsysinstall -lhsysinstall -lhdatabase -ltcl83 -lm > -L/usr/local/lib -lstdc++ -ldisk -lfetch -lz -lcom_err -lssl -lcrypto > -lm > /usr/home/anarcat/cvs-work/libh/compile/none/libhsysinstall.so: > undefined reference to `cerr' > /usr/home/anarcat/cvs-work/libh/compile/none/libhsysinstall.so: > undefined reference to `LanguageInterface::LanguageInterface(bool)' > > This is because "-L/usr/lib" is missing (???). Adding it gives us the > exact same result as trying to link pkg_create: > > anarcat@lenny[~/libh/compile/none]% gcc31 -pipe -g > -I/usr/local/include/tcl8.3 -fpic -DPIC > -I/usr/home/anarcat/cvs-work/libh/bin/tclh/../../include -Wall -o > tclh tclh.o -L/usr/home/anarcat/cvs-work/libh/compile/none -lhtcl -lh > -lhtclfile -lhfile -lhtcldisk -lhdisk -lhtclhui -lhui > -lhtclsysinstall -lhsysinstall -lhdatabase -ltcl83 -lm > -L/usr/local/lib -lstdc++ -ldisk -lfetch -lz -lcom_err -lssl -lcrypto > -lm -L/usr/lib > /usr/home/anarcat/cvs-work/libh/compile/none/libhsysinstall.so: > undefined reference to `LanguageInterface::LanguageInterface(bool)' > [...] > > However, trying to link pkg_create statically doesn't give any better > results and actually spews thousands of undefined references. > > Do you know which gcc wizard I could redirect this too? > > A. > > On Tue Nov 12, 2002 at 08:07:23PM -0800, Jordan K Hubbard wrote: >> Link order? What happens when you stick -lhsysinstall *earlier* in >> the >> link line, say before -lhtcl? >> >> On Tuesday, November 12, 2002, at 08:02 PM, The Anarcat wrote: >> >>> Hi all >>> >>> I write this to you in an attempt to solve a recurring problem I'm >>> having with libh that is *really* hindering development, for me. I'm >>> currently trying to rewrite our pkg_create sh script in C++ (from a >>> sh >>> script). I just checked-in the source in libh/bin/pkg_create. You >>> haven't seen the mail because of DNS problems on rtp1. >>> >>> Anyways, I'm having problem linking the final program. I've seen >>> similar problems when trying to switch to rhtvision and link other >>> programs against libh. >>> >>> The source file is being properly compiled, g++ can find its headers, >>> etc, and I can generate the .o file. However, when trying to link, I >>> get: >>> >>> g++31 -O -pipe -I../../include -I/usr/local/include/tcl8.3 -c >>> pkg_create.cc >>> g++31 -O -pipe -I../../include -I/usr/local/include/tcl8.3 >>> -L/usr/local/lib -L/usr/lib -o pkg_create pkg_create.o -ltcl83 -lh >>> -lhtcl -lhdatabase -lhfile -lhsysinstall >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::LanguageInterface(bool)' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::Object type_info node' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::languageUnref(LanguageInterface::Object const &) >>> const' >>> /usr/lib/libhsysinstall.so: undefined reference to `LanguageInterface >>> type_info function' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::referenced(LanguageInterface::Object const *) >>> const' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::languageRef(LanguageInterface::Object const &) >>> const' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::referenced(LanguageInterface::Object const &) >>> const' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::Object type_info function' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::gc(void) const' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::referencedObjects(void)' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::referenceObject(LanguageInterface::Object const >>> *) >>> const' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `Shared::onHeap(void const *)' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::dereferenceObject(LanguageInterface::Object const >>> *) const' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::object2string(LanguageInterface::Object const *)' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `Shared::isOnHeap(Shared const *)' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::~LanguageInterface(void)' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::languageRef(LanguageInterface::Object const *) >>> const' >>> /usr/lib/libhsysinstall.so: undefined reference to >>> `LanguageInterface::languageUnref(LanguageInterface::Object const *) >>> const' >>> /usr/lib/libhsysinstall.so: undefined reference to `LanguageInterface >>> type_info node' >>> collect2: ld returned 1 exit status >>> *** Error code 1 >>> >>> Stop in /usr/home/anarcat/cvs-work/libh/bin/pkg_create. >>> >>> I have just installed that library (libhsysinstall). What I don't >>> understand is that I can't find that damn symbol anywhere: >>> >>> anarcat@lenny[~/libh/compile/none]% for f in libh* >>> do; nm -C $f 2>/dev/null | grep LanguageInterface::Language && echo >>> "$f" >>> done >>> U LanguageInterface::LanguageInterface(bool) >>> libhsysinstall.a >>> U LanguageInterface::LanguageInterface(bool) >>> libhsysinstall.so >>> U LanguageInterface::LanguageInterface(bool) >>> libhsysinstall.so.0 >>> 00000000 W LanguageInterface::LanguageInterface(bool) >>> libhtcl.a >>> 000519da W LanguageInterface::LanguageInterface(bool) >>> libhtcl.so >>> 000519da W LanguageInterface::LanguageInterface(bool) >>> libhtcl.so.0 >>> 00000000 W LanguageInterface::LanguageInterface(bool) >>> libhtcldisk.a >>> 00043798 W LanguageInterface::LanguageInterface(bool) >>> libhtcldisk.so >>> 00043798 W LanguageInterface::LanguageInterface(bool) >>> libhtcldisk.so.0 >>> 00000000 W LanguageInterface::LanguageInterface(bool) >>> libhtclfile.a >>> 00049a12 W LanguageInterface::LanguageInterface(bool) >>> libhtclfile.so >>> 00049a12 W LanguageInterface::LanguageInterface(bool) >>> libhtclfile.so.0 >>> 00000000 W LanguageInterface::LanguageInterface(bool) >>> libhtclhui.a >>> 0007969e W LanguageInterface::LanguageInterface(bool) >>> libhtclhui.so >>> 0007969e W LanguageInterface::LanguageInterface(bool) >>> libhtclhui.so.0 >>> 00000000 W LanguageInterface::LanguageInterface(bool) >>> libhtclsysinstall.a >>> 000a4e32 W LanguageInterface::LanguageInterface(bool) >>> libhtclsysinstall.so >>> 000a4e32 W LanguageInterface::LanguageInterface(bool) >>> libhtclsysinstall.so.0 >>> >>> Some symbols are defined, however. For example, Shared::onHeap() is >>> defined in libh.so: >>> >>> 0003a746 T Shared::onHeap(void const*) >>> libh.so >>> >>> The thing itself is kinda very important to libh. It is defined in >>> libh/include/LanguageInterface.hh: >>> >>> class LanguageInterface >>> { >>> friend class H; >>> friend class HObjectsReferences; >>> >>> public: >>> LanguageInterface( bool enableGC ) : mGC( enableGC ) {} >>> ... >>> } >>> >>> Why it's not linking anywhere is beyond me. >>> >>> Also, why tclh is linking at all is also a great mystery for me. >>> >>> Please, any hint will help greatly. I'm completly confused and pretty >>> desperate to solve this problem. >>> >>> If I can't get this program to link I don't see very well where we >>> should be going next. Is it really impossible/forbidden to link >>> against LibH? >>> >>> A. >>> >>> -- >>> Advertisers, not governments, are the primary censors of media >>> content >>> in the United States today. >>> - C. Edwin Baker >>> http://www.ad-mad.co.uk/quotes/freespeech.htm >>> <mime-attachment> >> -- >> Jordan K. Hubbard >> Engineering Manager, BSD technology group >> Apple Computer >> > > > -- > Why bother building more nukes until we use the ones we already have? > <mime-attachment> -- Jordan K. Hubbard Engineering Manager, BSD technology group Apple Computer To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-libh" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?820539DB-F73D-11D6-9957-000393BB9222>