undefined reference to



  • Hallo ihr lieben Freunde des großen "C"

    Ich habe da einen Header bitmap.h

    #ifndef _BITMAP_H_
    #define _BITMAP_H_
    #include <stdint.h>
    
    #define _bitsperpixel 24
    #define _planes 1
    #define _compression 0
    #define _xpixelpermeter 0x130B //2835 , 72 DPI
    #define _ypixelpermeter 0x130B //2835 , 72 DPI
    #define pixel 0xFF
    
    
    typedef struct __attribute__((packed, aligned(1))) {
        uint8_t signature[2];
        uint32_t filesize;
        uint32_t reserved;
        uint32_t fileoffset_to_pixelarray;
    } fileheader_t;
    
    
    typedef struct __attribute__((packed, aligned(1))) {
        uint32_t dibheadersize;
        uint32_t width;
        uint32_t height;
        uint16_t planes;
        uint16_t bitsperpixel;
        uint32_t compression;
        uint32_t imagesize;
        uint32_t ypixelpermeter;
        uint32_t xpixelpermeter;
        uint32_t numcolorspallette;
        uint32_t mostimpcolor;
    } bitmapinfoheader_t;
    
    bitmapinfoheader_t bitmapinfoheader;
    
    typedef struct {
        fileheader_t fileheader;
        bitmapinfoheader_t bitmapinfoheader;
    } sbitmap_header_t;
    
    sbitmap_header_t * bmp_create_header(int w, int h);
    

    und das dazugehörige bitmap.c

    //https://stackoverflow.com/a/23303847
    #include "bitmap.h"
    #include <string.h>
    #include <stdlib.h>
    
    
    sbitmap_header_t * bmp_create_header(int w, int h)
    {
    	sbitmap_header_t *pbitmap  = (sbitmap_header_t*)calloc(1, sizeof(sbitmap_header_t));
    	int _pixelbytesize = w * h * _bitsperpixel/8;
    	int _filesize = _pixelbytesize+sizeof(sbitmap_header_t);
    	strcpy((char*)pbitmap->fileheader.signature, "BM");
    	pbitmap->fileheader.filesize = _filesize;
    	pbitmap->fileheader.fileoffset_to_pixelarray = sizeof(sbitmap_header_t);
    	pbitmap->bitmapinfoheader.dibheadersize = sizeof(bitmapinfoheader);
    	pbitmap->bitmapinfoheader.width = w;
    	pbitmap->bitmapinfoheader.height = h;
    	pbitmap->bitmapinfoheader.planes = _planes;
    	pbitmap->bitmapinfoheader.bitsperpixel = _bitsperpixel;
    	pbitmap->bitmapinfoheader.compression = _compression;
    	pbitmap->bitmapinfoheader.imagesize = _pixelbytesize;
    	pbitmap->bitmapinfoheader.ypixelpermeter = _ypixelpermeter ;
    	pbitmap->bitmapinfoheader.xpixelpermeter = _xpixelpermeter ;
    	pbitmap->bitmapinfoheader.numcolorspallette = 0;
    	return pbitmap;
    }
    

    in meiner Main function bekomme ich folgenden Fehler
    undefined reference to bmp_create_header(int, int)

    sbitmap_header_t* header = bmp_create_header(320, 240);
    //sbitmap_header_t* header; // = bmp_create_header(camera_get_fb_width(), camera_get_fb_height());
    if (header == NULL) {
    	return;
    }
    

    Hat da einer eine Idee was da schief geht.



  • bitmap.c beim Aufruf vom Compiler/Linker nicht angegeben?



  • @ats3788k sagte in undefined reference to:

    Hallo ihr lieben Freunde des großen "C"

    Hier sind die Freunde des großen C++



  • Und wo sind die vom Hohen C??



  • @ats3788k
    Der Code ist fehlerhaft, selbst wenn du ihn zum Laufen bringst (fehlendes Allokieren des Pixelbuffers, kein Alignmentcheck - Rasterzeilen liegen auf Doppelwortgrenzen, fehlerhafte Bitmapinfo - „packed Bitmaps” bestehen nur aus Infoheader + Adresse des Buffers).
    Wenn das Bild von einer Kamera kommt, mag die fehldende Ausrichtung kein Problem sein, aber ein generelles Create darf so eigentlich nicht geschrieben werden.



  • Hallo keinen Sinn für Lockerheit und Heiterkeit. LOL
    Ich bin froh wenn ihr weiterhelft weil "C++" ist nicht ganz meine Sache. Ich komme aus der Pascal Welt sorry.
    Ich habe mal den Prototyp von bitmap.h nach __Bitmap.h geändert und das gleiche mit dem Sourcefile und siehe da es funzzt.

    Kann mir mal einer erklären was der Grund sein könnte ??? Auf dem System habe ich noch eine gdiplusbitmap.h Datei das ist es aber mit einer Ähnlichkeit
    des Namen bitmap und Prototyp.🤡



  • @yahendrik Ich habe den Code nicht geschrieben habe ich aus Github
    https://github.com/igrr/esp32-cam-demo
    Den Code hat ein Gott geschrieben. Bis jetzt hatte ich noch nie einen Fehler wenn Ibrahim Abdelkader was veröffentlich hat.



  • Hat dir die Antwort von Swordfish geholfen? Die Fehlermeldung lässt auf ein Fehler beim kompilieren / linken schließen und nicht auf ein Fehler im Source Code.



  • Er hat ...

    @ats3788k sagte in undefined reference to:

    [...]mal den Prototyp von bitmap.h nach __Bitmap.h geändert und das gleiche mit dem Sourcefile und siehe da es funzzt.

    🙄


Log in to reply