[vox-tech] Wierd linker thing
Troy Arnold
troy-vox at zenux.net
Wed Jul 6 14:11:49 PDT 2005
On Wed, Jul 06, 2005 at 10:22:35AM -0700, Kenneth Bloom wrote:
>
> So earlier this week, I was trying to compile and run a network daemon
> which we are writing at work that used the pthread_create() system call.
> The problem I found was that whenever the program would try to call
> pthread_create(), the program would segfault. The backtrace would contain
> all of the calls leading up to pthread_create(), but not pthread_create()
> itself, and valgrind would report an error that the system had tried to
> jump to address 0x0.
>
> The primary developer of this daemon, however, had no problem running
> copies of the daemon that he had compiled.
>
> I spent all morning trying to figure out the cause of this problem, when I
> decided to run ldd on each of our binaries. I found that his was linked
> against libpthread, but mine was not. I added -lpthread to Makefile.am and
> recompiled, and mine worked.
>
> The question is this: if I wasn't linking with libpthread, then shouldn't
> the linker have complained at me that it couldn't resolve the symbol for
> pthread_create() when I was compiling? Why did this problem persist long
> enough to be an unidentifiable runtime error?
libc contains stubs for the pthread functions. IIRC, this is so one
copy of libc can work with both single and multi-threaded libraries.
-troy (whose C programming is at best a D+)
More information about the vox-tech
mailing list