使用xdelta:找不到头文件。 C ++

时间:2015-03-01 21:15:25

标签: c++ diff vcdiff

我正在尝试从客户端维护服务器上的文件历史记录,我想到了使用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对我来说不够。

1 个答案:

答案 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。

  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
    
  4. 如果一切正常,您应该有可执行文件“encode_decode_test”。它的示例使用 xdelta3 。现在,您可以以相同的方式构建程序。请参阅“examples”目录中的“Makefile”文件,以获得如何构建程序的线索。请注意,现在涉及无库