Linking a C++ program using pthreads fails

Tiago Jorge tjpj at lasige.di.fc.ul.pt
Thu May 26 13:03:09 CEST 2005


Derick Swanepoel wrote:

>Hi,
>
>I am busy porting a C++ program that uses pthreads to L4. I am using
>the l4env_freebsd mode to link against oskit10's thread library. The
>program compiles fine but linking fails as follows:
>
>LD_PRELOAD=/home/derick/DROPS/l4/tool/gendep/libgendep.so
>GENDEP_TARGET=pthreadtest GENDEP_BINARY=ld  gcc -o pthreadtest
>../../../../../lib/x86_586/crt0.o Thread.o
>../../../lib/framework/OBJ-x86_586-l4v2/{Event,Mutex}.o
>-loskit_threads -Ttext=0x01600000  -L../../../../../lib/x86_586/l4v2
>-L/home/derick/DROPS/drops/lib/x86_586/l4v2
>-L../../../../../lib/x86_586 -L/home/derick/DROPS/drops/lib/x86_586
>-L../../../../../lib -L/home/derick/DROPS/drops/lib
>-L../../../../../../oskit10/lib -L../../../../../lib/c++/3.3
>-L/home/derick/DROPS/drops/lib/oskit10
>-L/home/derick/DROPS/drops/lib/c++/3.3
>-T../../../../../lib/x86_586/main_stat.ld -lstdc++
>/usr/lib/gcc-lib/i486-linux/3.3.5/libgcc.a  -static
>-loskit10_support_l4env_freebsd.o -ll4env -ll4rm -ldm_generic -ldm_mem
>-lthread -lsemaphore -lnames -ll4util -lrmgr -ll4env -lomega0
>-llogserver -ll4env_err -ll4rm -ldm_generic -ldm_mem -lthread -lslab
>-ll4sys -nostdlib -Wl,--nostdlib -loskit_freebsd_c -loskit_freebsd_net
>-loskit_startup -loskit_clientos -loskit_bootp -loskit_linux_fs
>-loskit_fsnamespace -loskit_diskpart -loskit_linux_dev
>-loskit10_support_l4env_freebsd_dev -loskit_kern -loskit_lmm
>-loskit_amm -loskit_freebsd_c -loskit_com
>/usr/lib/gcc-lib/i486-linux/3.3.5/libgcc.a
>/usr/lib/gcc-lib/i486-linux/3.3.5/libgcc_eh.a -loskit_freebsd_c
>-Ttext=0x01600000 -Wl,-gc-sections
>Thread.o(.text+0x30): In function `Thread::start()':
>/home/derick/DROPS/l4/pkg/ibridge/server/pthreadtest/OBJ-x86_586-l4v2/../Thread.cpp:15:
>undefined reference to `pthread_attr_init(pthread_attr*)'
>Thread.o(.text+0x43):/home/derick/DROPS/l4/pkg/ibridge/server/pthreadtest/OBJ-x86_586-l4v2/../Thread.cpp:17:
>undefined reference to `pthread_create(void**, pthread_attr const*,
>void* (*)(void*), void*)'
>Thread.o(.text+0xb0): In function `SyncedThread::start()':
>/home/derick/DROPS/l4/pkg/ibridge/server/pthreadtest/OBJ-x86_586-l4v2/../Thread.cpp:36:
>undefined reference to `pthread_attr_init(pthread_attr*)'
>Thread.o(.text+0xc3):/home/derick/DROPS/l4/pkg/ibridge/server/pthreadtest/OBJ-x86_586-l4v2/../Thread.cpp:38:
>undefined reference to `pthread_create(void**, pthread_attr const*,
>void* (*)(void*), void*)'
>Thread.o(.text+0x140): In function `Manager::selectWorker()':
>/home/derick/DROPS/l4/pkg/ibridge/server/pthreadtest/OBJ-x86_586-l4v2/../../../lib/framework/Mutex.h:26:
>undefined reference to `pthread_mutex_lock(pthread_mutex*)'
>Thread.o(.text+0x15c):/home/derick/DROPS/l4/pkg/ibridge/server/pthreadtest/OBJ-x86_586-l4v2/../../../lib/framework/Mutex.h:27:
>undefined reference to `pthread_mutex_unlock(pthread_mutex*)'
>Thread.o(.text+0x16f): In function `Manager::selectWorker()':
>/home/derick/DROPS/l4/pkg/ibridge/server/pthreadtest/OBJ-x86_586-l4v2/../Thread.h:33:
>undefined reference to `sched_yield()'
>Thread.o(.text+0x1af): In function `Manager::selectWorker()':
>/home/derick/DROPS/l4/pkg/ibridge/server/pthreadtest/OBJ-x86_586-l4v2/../../../lib/framework/Mutex.h:27:
>undefined reference to `pthread_mutex_unlock(pthread_mutex*)'
>...
>
>I manually added -loskit_threads to my LDFLAGS. Am I linking against
>the right libraries?
>
>Thanks in advance.
>
>Derick
>
>_______________________________________________
>l4-hackers mailing list
>l4-hackers at os.inf.tu-dresden.de
>http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
>  
>
i've had the same problem... the pthread library of the oskit hasn't 
been ported to the oskit support in l4. In my case i've converted all 
pthread code to l4thread code.

Tiago




More information about the l4-hackers mailing list