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

make...また、sudo を使用して root として実行しないでください。これは、ビルド中に重要な何かを踏みにじる何かが壊れることを想像できるためです (root にならなければ防げたはずです)。

などのシステムの場所に実際に何かをインストールする場合は/usr/local、自分でビルドしてから、make -n install何をどこにインストールするかを確認します (ビルドするものにインストール ターゲットがあると仮定します)。すべてが問題ないように見える場合にのみ、 を実行しますsudo make install

于 2013-03-29T23:07:46.600 に答える