Question

I am trying to compile some software called libfprint. I had successfully compiled it on another machine but now however, in a number of files, I get the following error:

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

Any ideas? Thanks !

Edit

I'll post an example of the line it is throwing an error on:

    /* 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);
}
Était-ce utile?

La solution

This happens when

  • the first use of the function precedes its definition,
  • there is no prototype for the function, or
  • a required header file is missing.

Make sure that there is a prototype in the text or in a header, or move the function to the front of the file, before its first use.

Autres conseils

...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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top