[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