1

我正在尝试从客户端维护服务器上的文件历史记录,并且我考虑过使用 xdelta 。使用 xdelta 几乎没有在线帮助。我收集了一些代码片段并尝试运行它以自己理解它,但编译器给出以下错误:

fatal error: xdelta3.h: No such file or directory

我已经使用 apt-get 以及从网站下载 .tar 安装了 xdelta3 。

这是我包含的头文件:

#include <xdelta3.h>
#include <xdelta3-main.h>

关于 xdelta 的头文件是什么的任何想法?如果您还可以提供一些学习如何使用 xdelta 的链接,我们将不胜感激,因为文档对我来说不够。

4

1 回答 1

1

首先,请确保您也-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。

  1. 获取来源:

    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/
    
  2. 构建和安装:

    ./configure
    make
    sudo make install
    
  3. 检查它是否有效:

    cd examples/
    make clean
    make encode_decode_test
    ./encode_decode_test
    

如果一切正常,您应该有可执行文件“encode_decode_test”。它的示例使用xdelta3。现在你可以用同样的方式构建你的程序。请参阅“examples”目录中的“Makefile”文件以了解如何构建程序。请注意,现在不涉及任何库。

于 2015-03-01T21:47:16.220 回答