我正在尝试从客户端维护服务器上的文件历史记录,我想到了使用xdelta。使用xdelta几乎没有在线帮助。我收集了一些代码并尝试运行它以便自己理解它,但编译器给出了以下错误:
fatal error: xdelta3.h: No such file or directory
我使用apt-get安装了xdelta3,并从website下载了.tar。
这是我收录的头文件:
#include <xdelta3.h>
#include <xdelta3-main.h>
关于xdelta的头文件是什么的任何想法?如果您还可以提供一些学习如何使用xdelta的链接,我将不胜感激,因为documentation对我来说不够。
答案 0 :(得分:0)
首先,请确保您已安装-dev
个软件包。在我的Debian系统上,我做了:
$ sudo apt-get install libxdelta2-dev
现在您应该可以使用这些xdelta
标头了。但它们的命名可能与您使用的命名不同。你可以这样检查:
$ dpkg -L libxdelta2-dev | grep include
对我来说:
/usr/include/edsio_edsio.h
/usr/include/edsio.h
/usr/include/xd_edsio.h
/usr/include/xdelta.h
所以你可以看到,在这种情况下我应该使用xdelta.h
标题,不是xdelta3.h
。使用dpkg -L
包尝试使用相同的-dev
命令。
如果您有不同版本的xdelta*-dev
包,请检查此命令的输出:
pkg-config --list-all | grep delta
对我来说输出是空的,但如果输出中有libxdelta
之类的内容,请务必使用以下选项编译应用程序:
$ gcc $(pkg-config --cflags --libs libxdelta) main.c
更新1
至于您的链接问题。我猜您使用的是 gcc ,因此它会自动为您使用正确的链接器。问题是,你应该提供你想要链接程序的库名,作为链接器选项。
首先,您应该找出您的实际库名:
$ ls -1 /usr/lib | grep xdelta | grep so
你会看到这样的事情:
libxdelta.so
libxdelta.so.2
libxdelta.so.2.0.0
现在你知道你的库名:它是 lib 和 .so 之间的库文件名的一部分,在这种情况下,库名是 xdelta
现在,您可以使用-l
选项链接您的程序:
$ gcc -lxdelta main.c
您可能还需要指定xdelta库的路径,如果它不是标准库(如/usr/lib/
):
$ gcc -L/your/path/to/xdelta/ -lxdelta main.c
更新2
如何构建和使用xdelta3。
获取消息来源:
cd /tmp
wget https://xdelta.googlecode.com/files/xdelta3-3.0.8.tar.xz
tar xJvf xdelta3-3.0.8.tar.xz
cd xdelta3-3.0.8/
构建并安装:
./configure
make
sudo make install
检查它是否有效:
cd examples/
make clean
make encode_decode_test
./encode_decode_test
如果一切正常,您应该有可执行文件“encode_decode_test”。它的示例使用 xdelta3 。现在,您可以以相同的方式构建程序。请参阅“examples”目录中的“Makefile”文件,以获得如何构建程序的线索。请注意,现在涉及无库。