Date: Thu, 13 Mar 2003 15:05:38 -0800 From: Marcel Moolenaar <marcel@xcllnt.net> To: Joe Marcus Clarke <marcus@marcuscom.com> Cc: hackers@FreeBSD.ORG Subject: Re: Question on gcc linker and -pthread Message-ID: <20030313230538.GA58315@ns1.xcllnt.net> In-Reply-To: <1047586732.84063.10.camel@gyros> References: <1047586732.84063.10.camel@gyros>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Mar 13, 2003 at 03:18:52PM -0500, Joe Marcus Clarke wrote: > I've noticed something I think is strange with gcc, the -shared flag, > and -pthread on -STABLE. I'm hoping someone can enlighten me as to why > this happens or if it's a bug. If I compile something with the > following command, I do not see libc_r.so linked in the resulting > object: > > cc -shared -pthread -o xxx.so xxx.c > > However, if I replace -pthread with -lc_r, it works. Also, if I change > the command to: > > cc -Wl,-shared -pthread -o xxx.so xxx.c > > I also see libc_r.so linked in. Is this expected behavior? libtool > seems to like the former -shared syntax which is causing some problems > with some GTK themes. Thanks. The -shared option tells the compiler driver that you're trying to create a shared object. In that case -lc_r is not added to the link line. Adding -lc_r explicitly is dangerous, because now the linker will construct a shared object that has code linked in from an archive library that has not been compiled with PIC. Consequently, some architectures (eg ia64) may barf when you try to link against this shared object because it may contain invalid relocations. Using -Wl,-shared tricks the compiler driver in thinking you are creating an executable. It will therefore make sure dependencies are correct by adding -lc_r on the link line. You tell the linker however that you're creating a shared object, but now it also has -lc_r explicitly. Again, this can result in a bad shared object. I don't think there's a bug. -- Marcel Moolenaar USPA: A-39004 marcel@xcllnt.net 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?20030313230538.GA58315>