Date: Thu, 02 Jan 2003 21:25:11 -0800 From: Tim Kientzle <kientzle@acm.org> To: "M. Warner Losh" <imp@bsdimp.com> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: devd, crunchgen, C++, and /rescue Message-ID: <3E151EB7.2050003@acm.org> References: <3E134AB2.8030401@acm.org> <20030102.195102.106545644.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> Tim Kientzle <kientzle@acm.org> writes: > : Does anyone know how to get crunchgen to play nicely with C++ programs? M. Warner Losh asks: > What's the problem. Using crunchgen directly gives the expected linkage problems: # cat test.conf srcdirs /usr/src/sbin progs devd libs -ll # crunchgen -q test.conf Run "make -f test.mk" to build crunched binary. # make -f test.mk (cd /usr/src/sbin/devd && make depend && make devd.o token.o parse.o) `devd.o' is up to date. `token.o' is up to date. `parse.o' is up to date. cc -O -pipe -mcpu=pentiumpro -c test.c echo "int _crunched_devd_stub(int argc, char **argv, char **envp){return main(argc,argv,envp);}" >devd_stub.c cc -O -pipe -mcpu=pentiumpro -c devd_stub.c ld -dc -r -o devd.lo devd_stub.o /usr/src/sbin/devd/devd.o /usr/src/sbin/devd/token.o /usr/src/sbin/devd/parse.o crunchide -k _crunched_devd_stub devd.lo cc -static -o test test.o devd.lo -ll devd.lo: In function `event_proc::~event_proc()': devd.lo(.text+0x223): undefined reference to `operator delete(void*)' devd.lo: In function `action::action(char const*)': devd.lo(.text+0x347): undefined reference to `std::string::string(char const*, std::allocator<char> const&)' devd.lo: In function `action::action(char const*)': .... 230 additional lines of errors deleted ... Attempting to re-link with c++ instead of cc gives just one error (this would be the obvious change to 'crunchgen' if it worked): # c++ -static -o test test.o devd.lo -ll /usr/lib/libstdc++.a(locale-inst.o): In function `std::money_get<char, std::istreambuf_iterator<char, std::char_traits<char> > >::do_get(std::istreambuf_iterator<char, std::char_traits<char> >, std::istreambuf_iterator<char, std::char_traits<char> >, bool, std::ios_base&, std::_Ios_Iostate&, std::string&) const': locale-inst.o(.gnu.linkonce.t._ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs+0xa44): undefined reference to `unsigned const& std::min<unsigned>(unsigned const&, unsigned const&)' For the record, cd /usr/src/sbin/devd && make clean && make works just fine on this machine, so I'm reasonably confident that the compiler, libs, etc, are all correctly installed. This one has me stumped. Any ideas? Tim To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3E151EB7.2050003>