我正在尝试为 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 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
最佳答案
您的/bin/date 是动态链接的可执行文件吗? ldd/bin/date 是否显示对共享库的依赖关系?另外,它是否链接到 libdl.so.2?
如果是动态链接但没有链接到libdl.so.2.,请将/lib/libdl.so.2添加到LD_PRELOAD路径。
关于c++ - Libfaketime Linux 3.1.0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199381/