Portál AbcLinuxu, 10. května 2025 00:00

Dotaz: LibFTDI: Undefined reference

22.5.2011 19:29 Hrabosh | skóre: 26 | blog: HBlog | Brno
LibFTDI: Undefined reference
Přečteno: 555×
Odpovědět | Admin
Zdravím.

Snažím se zkompilovat example od FTDI pro bit-bang mód USB převodníku FT245.

Zdroják zde (odstranil jsem znak <> kolem includnutých header souborů, protože se to sem nechtělo vložit):

/* This program is distributed under the GPL, version 2 */

#include stdio.h
#include unistd.h
#ifdef __WIN32__
#define sleep(x) Sleep(x)
#endif
#include ftdi.h

int main(int argc, char **argv)
{
    struct ftdi_context ftdic;
    int f,i;
    unsigned char buf[1];

    if (ftdi_init(&ftdic) < 0)
    {
        fprintf(stderr, "ftdi_init failed\n");
        return EXIT_FAILURE;
    }

    f = ftdi_usb_open(&ftdic, 0x0403, 0x6001);

    if (f < 0 && f != -5)
    {
        fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic));
        exit(-1);
    }

    printf("ftdi open succeeded: %d\n",f);

    printf("enabling bitbang mode\n");
    ftdi_set_bitmode(&ftdic, 0xFF, BITMODE_BITBANG);

    sleep(3);

    buf[0] = 0x0;
    printf("turning everything on\n");
    f = ftdi_write_data(&ftdic, buf, 1);
    if (f < 0)
    {
        fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(&ftdic));
    }

    sleep(3);

    buf[0] = 0xFF;
    printf("turning everything off\n");
    f = ftdi_write_data(&ftdic, buf, 1);
    if (f < 0)
    {
        fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(&ftdic));
    }

    sleep(3);

    for (i = 0; i < 32; i++)
    {
        buf[0] =  0 | (0xFF ^ 1 << (i % 8));
        if ( i > 0 && (i % 8) == 0)
        {
            printf("\n");
        }
        printf("%02hhx ",buf[0]);
        fflush(stdout);
        f = ftdi_write_data(&ftdic, buf, 1);
        if (f < 0)
        {
            fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(&ftdic));
        }
        sleep(1);
    }

    printf("\n");

    printf("disabling bitbang mode\n");
    ftdi_disable_bitbang(&ftdic);

    ftdi_usb_close(&ftdic);
    ftdi_deinit(&ftdic);
}

Při pokusu o kompiulace příkazem:

gcc bitbang.c -o bitbang

dostanu tohle:
hrabosh@GentooOnAthlon ~/Aktualni_vyvojovy_mrdnik/USB $ gcc bitbang.c -o bitbang
/tmp/ccIlZQWy.o: In function `main':
bitbang.c:(.text+0x15): undefined reference to `ftdi_init'
bitbang.c:(.text+0x6b): undefined reference to `ftdi_usb_open'
bitbang.c:(.text+0x89): undefined reference to `ftdi_get_error_string'
bitbang.c:(.text+0xf5): undefined reference to `ftdi_set_bitmode'
bitbang.c:(.text+0x12e): undefined reference to `ftdi_write_data'
bitbang.c:(.text+0x145): undefined reference to `ftdi_get_error_string'
bitbang.c:(.text+0x1ad): undefined reference to `ftdi_write_data'
bitbang.c:(.text+0x1c4): undefined reference to `ftdi_get_error_string'
bitbang.c:(.text+0x292): undefined reference to `ftdi_write_data'
bitbang.c:(.text+0x2a9): undefined reference to `ftdi_get_error_string'
bitbang.c:(.text+0x318): undefined reference to `ftdi_disable_bitbang'
bitbang.c:(.text+0x324): undefined reference to `ftdi_usb_close'
bitbang.c:(.text+0x330): undefined reference to `ftdi_deinit'
collect2: ld returned 1 exit status
Nevíte někdo, kde hledat problém?

Díky !
To jsem psal já ... to není bordel, to je modulární!
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.5.2011 19:54 chrono
Rozbalit Rozbalit vše Re: LibFTDI: Undefined reference
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pri tom kompilovaní chýba niečo ako -lftdi (a teda treba kompilátoru povedať, že sa tam používa aj nejaká knižnica). Je ale možné (nechce sa mi to zisťovať), že FTDI knižnica obsahuje konfiguráciu pre pkgconfig a/alebo skript ftdi_config, takže sa to bude dať urobiť aj lepšie.
22.5.2011 20:13 Hrabosh | skóre: 26 | blog: HBlog | Brno
Rozbalit Rozbalit vše Re: LibFTDI: Undefined reference
Díky, -lftdi pomohlo. Nicméně já jsem si myslel, že to zařídí to #include ftdi.h .... ne ?
To jsem psal já ... to není bordel, to je modulární!
vlastikroot avatar 22.5.2011 20:57 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: LibFTDI: Undefined reference
Include jsou jen hlavičky (názvy funkci atd), pro skompilování se musí přidat i binární kód knihovny (ať už statické - přidá se kód do výsledného souboru, nebo dynamické - přidají se jen odkazy do knihovny).
We will destroys the Christian's legion ... and the cross, will be inverted
Pavel Stárek avatar 23.5.2011 10:56 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: LibFTDI: Undefined reference
Include jen řekne preprocesoru a compileru jak vypadají ty funkce popřípadě různé datové struktury, konstanty atd. Parametr -lftdi řekne linkeru s čím vším má program slinkovat, a parametr -L/nejaky/adresar ještě může upřesnit, kde všude má linker hledat.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.