Libfaketime Linux 3.1.0?

时间:2011-11-20 04:09:29

标签: c++ linux

我正在尝试为RunAsDate for Linux创建一个软件。我正在使用Linux 3.1.0,并且libfaketime不起作用。 谁能帮我这个? 我想我有最新版本。
这是问题所在:

$ ./faketime 'last friday 5 pm' /bin/date
date: symbol lookup error: /usr/lib/faketime/libfaketime.so.1: undefined symbol: dlsym
Error: Timestamp to fake not recognized, please re-try with a different timestamp. 

我运行sudo make install,然后将/ usr / local / lib / faketime链接到/ usr / lib / faketime。

编辑:响应hotchl的回答,这是(相同的)输出:

$ tar paxvf libfaketime-0.8.1.tar.gz
libfaketime-0.8.1/
libfaketime-0.8.1/test/
libfaketime-0.8.1/test/Makefile
libfaketime-0.8.1/test/timetest.c
libfaketime-0.8.1/test/test.sh
libfaketime-0.8.1/README
libfaketime-0.8.1/Makefile
libfaketime-0.8.1/man/
libfaketime-0.8.1/man/Makefile
libfaketime-0.8.1/man/faketime.1
libfaketime-0.8.1/src/
libfaketime-0.8.1/src/Makefile
libfaketime-0.8.1/src/faketime
libfaketime-0.8.1/src/faketime.c
libfaketime-0.8.1/meta/
libfaketime-0.8.1/meta/Makefile
libfaketime-0.8.1/meta/Changelog
libfaketime-0.8.1/meta/COPYING
$ cd libfaketime-0.8.1/src
$ make
gcc -o faketime.o -c -std=gnu99 -Wall -DFAKE_STAT -DFAKE_INTERNAL_CALLS -fPIC  faketime.c
gcc -o libfaketime.so.1 -Wl,-soname,libfaketime.so.1 -shared -ldl -lm -lpthread faketime.o
gcc -o faketimeMT.o -c -std=gnu99 -Wall -DFAKE_STAT -DFAKE_INTERNAL_CALLS -fPIC -DPTHREAD -DPTHREAD_SINGLETHREADED_TIME faketime.c
gcc -o libfaketimeMT.so.1 -Wl,-soname,libfaketimeMT.so.1 -shared -ldl -lm -lpthread faketimeMT.o
$ LD_PRELOAD=`pwd`/libfaketime.so.1 FAKETIME="-15d" /bin/date
/bin/date: symbol lookup error: ./libfaketime.so.1: undefined symbol: dlsym

2 个答案:

答案 0 :(得分:3)

你的/ bin / date是动态链接的可执行文件吗? ldd / bin / date是否显示对共享库的依赖性?此外,它是否链接到libdl.so.2?

如果它是动态链接但未链接到libdl.so.2。,请将/lib/libdl.so.2添加到LD_PRELOAD路径。

答案 1 :(得分:0)

好的,这是有效的:

$ tar paxvf libfaketime-0.8.1.tar.gz
libfaketime-0.8.1/
libfaketime-0.8.1/test/
libfaketime-0.8.1/test/Makefile
libfaketime-0.8.1/test/timetest.c
libfaketime-0.8.1/test/test.sh
libfaketime-0.8.1/README
libfaketime-0.8.1/Makefile
libfaketime-0.8.1/man/
libfaketime-0.8.1/man/Makefile
libfaketime-0.8.1/man/faketime.1
libfaketime-0.8.1/src/
libfaketime-0.8.1/src/Makefile
libfaketime-0.8.1/src/faketime
libfaketime-0.8.1/src/faketime.c
libfaketime-0.8.1/meta/
libfaketime-0.8.1/meta/Makefile
libfaketime-0.8.1/meta/Changelog
libfaketime-0.8.1/meta/COPYING
$ cd libfaketime-0.8.1/src
$ make
gcc -o faketime.o -c -std=gnu99 -Wall -DFAKE_STAT -DFAKE_INTERNAL_CALLS -fPIC  faketime.c
gcc -o libfaketime.so.1 -Wl,-soname,libfaketime.so.1 -shared -ldl -lm -lpthread faketime.o
gcc -o faketimeMT.o -c -std=gnu99 -Wall -DFAKE_STAT -DFAKE_INTERNAL_CALLS -fPIC -DPTHREAD -DPTHREAD_SINGLETHREADED_TIME faketime.c
gcc -o libfaketimeMT.so.1 -Wl,-soname,libfaketimeMT.so.1 -shared -ldl -lm -lpthread faketimeMT.o
$ LD_PRELOAD=`pwd`/libfaketime.so.1 FAKETIME="-15d" /bin/date
Sat Nov  5 06:10:46 CET 2011

faketime中的脚本src以某种方式对我不起作用,但现在是早上6点,所以也许我太累了;-)它结合了很多引用文档的评论,所以我想你可以通过观察它来使它工作。