C++ Libfaketime Linux 3.1.0?
我正在尝试为Linux创建一个类似RunAsDate的软件。我在Linux 3.1.0上工作,而libfaketime不工作。 有人能帮我吗? 我想我有最新的版本。C++ Libfaketime Linux 3.1.0?,c++,linux,C++,Linux,我正在尝试为Linux创建一个类似RunAsDate的软件。我在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 reco
问题是:
$ ./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.
我运行了sudomakeinstall
,然后将/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
Sat Nov 5 06:10:46 CET 2011
src
中的脚本faketime
对我来说不起作用,但现在是早上6点,所以可能我太累了;-)它包含了许多引用文档的注释,因此我想您可以通过查看这些注释来实现它。您的/bin/date是动态链接的可执行文件吗?ldd/bin/date是否显示对共享库的依赖关系?另外,它是否链接到libdl.so.2
如果它是动态链接的,但没有链接到libdl.so.2,请将/lib/libdl.so.2添加到LD_预加载路径。libfaketime有什么问题吗?很抱歉!我编辑了这篇文章。没有足够的信息。请重新启动问题:)嗯,我假设您使用的是源tarball,但错误显示为
/usr/lib/faketime/libfaketime.so.1
,这在您的系统上有所不同。我建议先尝试一种简单的测试格式,比如FAKETIME=“-1d”
之类。您的/bin/date是动态链接的可执行文件吗?ldd/bin/date是否显示对共享库的依赖关系?另外,它是否链接到libdl.so.2?如果没有,请尝试将/lib/libdl.so.2添加到LD_预加载路径。好吧,这很奇怪,它看起来像是缺少了-ldl
,但编译时已明确设置了-ldl
。很抱歉之前没有给出“正确答案”!我可以确认这是有效的:)
$ 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