2

我正在尝试编译一些名为libfprint的软件。我已经在另一台机器上成功编译了它,但是现在,在许多文件中,我收到以下错误:

tomselleck@ubuntuselleck:~/Documents/FingerBellProject/libfprint-0.5.0$ sudo make
[sudo] password for tomselleck: 
make  all-recursive
make[1]: Entering directory `/home/tomselleck/Documents/FingerBellProject/libfprint-0.5.0'
Making all in libfprint
make[2]: Entering directory `/home/tomselleck/Documents/FingerBellProject/libfprint-0.5.0/libfprint'
  CC       libfprint_la-aes1610.lo
drivers/aes1610.c: In function 'capture_read_strip_cb':
drivers/aes1610.c:619: error: implicit declaration of function 'g_slist_free_full'
make[2]: *** [libfprint_la-aes1610.lo] Error 1
make[2]: Leaving directory `/home/tomselleck/Documents/FingerBellProject/libfprint-0.5.0/libfprint'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/tomselleck/Documents/FingerBellProject/libfprint-0.5.0'
make: *** [all] Error 2

有任何想法吗?谢谢 !

编辑

我将发布一个引发错误的行的示例:

    /* stop capturing if MAX_FRAMES is reached */
    if (aesdev->blanks_count > 10 || g_slist_length(aesdev->strips) >= MAX_FRAMES) {
        struct fp_img *img;

        fp_dbg("sending stop capture.... blanks=%d  frames=%d", aesdev->blanks_count, g_slist_length(aesdev->strips));
        /* send stop capture bits */
        aes_write_regv(dev, capture_stop, G_N_ELEMENTS(capture_stop), stub_capture_stop_cb, NULL);
        aesdev->strips = g_slist_reverse(aesdev->strips);
        img = aes_assemble(aesdev->strips, aesdev->strips_len,
            FRAME_WIDTH, FRAME_HEIGHT);

        g_slist_free_full(aesdev->strips, g_free);<---- Error here

        aesdev->strips = NULL;
        aesdev->strips_len = 0;
        aesdev->blanks_count = 0;
        fpi_imgdev_image_captured(dev, img);
        fpi_imgdev_report_finger_status(dev, FALSE);
        /* marking machine complete will re-trigger finger detection loop */
        fpi_ssm_mark_completed(ssm);
        /* Acquisition finished: restore default gain values */
        restore_gain();
    } else {
        /* obtain next strip */
        fpi_ssm_jump_to_state(ssm, CAPTURE_REQUEST_STRIP);
    }

out:
    g_free(data);
    libusb_free_transfer(transfer);
}
4

2 回答 2

3

这发生在

  • 该函数的第一次使用在其定义之前,
  • 该函数没有原型,或者
  • 缺少所需的头文件。

在第一次使用之前,确保文本或标题中有原型,或者将函数移动到文件的前面。

于 2013-03-29T19:21:13.123 回答
0

...also (parenthetically) don't run make as root, with sudo. That's partly because one can imagine something breaking during the build which stomps on something important (which not being root would have prevented), and also on the general principle that it's good to be root as little as possible.

If you are indeed installing something in a system location such as /usr/local, build as yourself, then do make -n install and check what's going to be installed where (presuming the thing you're building has an install target). If everything looks OK, only then do sudo make install.

于 2013-03-29T23:07:46.600 回答