time problem
Björn Döbel
doebel at os.inf.tu-dresden.de
Mon Apr 6 09:01:30 CEST 2009
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hello,
> I write a simple test example about time function.but when I use the
> "time()" function,the code can not be compiled correctly.
> I just have include the <time.h>,any question?
Not quite correct. Including <time.h> only pulls the _declaration_ of
the time() function into your program. In order to actually use it, you
also need to have a _definition_ of this function available.
As your local C text book will tell you, there are two ways of getting
the definition of a function:
1) implement it in your code
2) link your program with a library providing this function
> the error I put following:
> l4 at 192:~/tudos/l4/pkg/test_fifo/examples/client$ make
> PWD=/home/l4/tudos/build/pkg/test_fifo/examples/client/OBJ-x86_586-l4v2
> make -C /home/l4/tudos/build/pkg/test_fifo/examples/client/OBJ-x86_586-l4v2
> -f Makefile
> make[1]: Entering directory
> `/home/l4/tudos/build/pkg/test_fifo/examples/client/OBJ-x86_586-l4v2'
> ... Compiling main.o
> LD_PRELOAD=/home/l4/tudos/build/tool/gendep/libgendep.so
> GENDEP_TARGET=main.o GENDEP_BINARY=cc1 gcc -m32 -c -DUSE_UCLIBC=y
> -DRAM_BASE=0x0 -DSYSTEM_x86_586_l4v2 -DARCH_x86 -DCPUTYPE_586
> -DL4API_l4v2 -DCONFIG_L4_CALL_SYSCALLS -DCONFIG_L4_ABS_SYSCALLS
> -I/home/l4/tudos/build/pkg/test_fifo/idl/OBJ-x86-l4v2
> -I/home/l4/tudos/build/include/x86/l4v2 -I/home/l4/tudos/build/include/l4v2
> -I/home/l4/tudos/build/include/x86 -I/home/l4/tudos/build/include
> -I/home/l4/tudos/l4/../dice/include -I/home/drops/include/x86/l4v2
> -I/home/drops/include/l4v2 -I/home/drops/include/x86 -I/home/drops/include
> -nostdinc -I/home/l4/tudos/build/include/x86/uclibc
> -I/home/l4/tudos/build/include/uclibc
> -I/home/l4/tudos/build/include/uclibc++ -I/home/drops/include/x86/uclibc
> -I/home/drops/include/uclibc -I/home/drops/include/uclibc++
> -I/usr/lib/gcc/i486-linux-gnu/4.2.4/include
> -I/usr/lib/gcc/i486-linux-gnu/4.2.4/include-fixed -gstabs+ -g -O2
> -fno-strict-aliasing -march=i586 -Wall -Wstrict-prototypes
> -Wmissing-prototypes -Wmissing-declarations -fno-common
> -fno-stack-protector /home/l4/tudos/l4/pkg/test_fifo/examples/client/main.c
> -o main.o
> ==> Linking test_fifo-client
> LD_PRELOAD=/home/l4/tudos/build/tool/gendep/libgendep.so
> GENDEP_TARGET=test_fifo-client GENDEP_BINARY=ld GENDEP_BINARY_ALT1=ld ld -m
> elf_i386 -o test_fifo-client /home/l4/tudos/build/lib/x86_586/crt0.o main.o
> test-client.o -Ttext=0x1100000 --hash-style=sysv
> -L/home/l4/tudos/build/lib/x86_586/l4v2 -L/home/l4/tudos/build/lib/x86_586
> -L/home/l4/tudos/build/lib -L/home/drops/lib/x86_586/l4v2
> -L/home/drops/lib/x86_586 -L/home/drops/lib
> -T/home/l4/tudos/build/lib/x86_586/main_stat.ld -static -lgeneric_ts
> -ll4env -ll4rm -ldm_generic -ldm_mem -lthread -lsemaphore
> -llogserver_capsule -lnames -ll4util_root -ll4util -lsigma0 -lroot -ll4env
> -ll4env_err -ll4rm -ldm_generic -ldm_mem -lthread -lslab -ll4sys -nostdlib
> -luc_c -luclibc_support -u mmap_anon -lc_be_simple_mem -lc_be_mmap
> -lc_be_mmap_util -lc_be_l4env_start_stop -lc_be_minimal_log_io
> -luc_be_simple_sleep -ll4env -llogserver_capsule -ll4rm -ldm_generic
> -ldm_mem -lthread -lgeneric_ts -luc_c
> /usr/lib/gcc/i486-linux-gnu/4.2.4/libgcc.a -luc_c -ll4sys -Ttext=0x1100000
> --warn-common -gc-sections
> main.o: In function `main':
> /home/l4/tudos/l4/pkg/test_fifo/examples/client/main.c:36: undefined
> reference to `time'
> /home/l4/tudos/l4/pkg/test_fifo/examples/client/main.c:40: undefined
> reference to `time'
> /home/l4/tudos/l4/pkg/test_fifo/examples/client/main.c:36: undefined
> reference to `time'
This is what the linker is telling you here: I cannot find a definition
of time(), but i desparately need one.
> [..]
>
> I have search the same error in l4-hackers ,someone suggest use rtc server,I
> think it's a good idea.but I have found that the time() function in
> time.h,why the error will happen?
> The reason I just include time.h?
Indeed, the time() function is provided by libc_be_time, which comes as
part of the rtc package. So what you need to do is add
LIBS += -lc_be_time
to your Makefile.
Cheers,
Bjoern
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAknZqMgACgkQP5ijxgQLUNk5eQCdG0MHez/8dCyxaRrxuPj1DoVN
M6cAnRQTA1nJw5aHBl6awaQnwIYZbrFe
=oqIX
-----END PGP SIGNATURE-----
More information about the l4-hackers
mailing list