Ich versuche gerade ezfb ( http://www.akrobiz.com/ezfb/ , eine
Framebuffer-Lib) in meinem eigenen Projekt zu compilieren, stosse da
aber auf ein Problem.
Die Demos lassen sich ohne weiteres von meinem Host-GCC compilieren.
Der Cross-Compiler, der ezfb compilieren soll ist ein GCC für ARM.
Der compiliert auch ohne Warnungen mit -Wall durch, nur linken kann er
nicht. Allerdings macht es keinen Unterschied ob ich den Host oder den
Cross-Compiler im Makefile einsetze.
Hier die Fehlermeldungen:
1 | ...
|
2 | ezfb_bmp.c:1205: undefined reference to `bmp_is_same_size'
|
3 | ezfb_bmp.c:1733: undefined reference to `ezfb_get_g_from_rgb'
|
4 | ezfb_bmp.c:1736: undefined reference to `ezfb_get_r_from_rgb'
|
5 | ezfb_bmp.c:1760: undefined reference to `ezfb_get_b_from_rgb'
|
6 | ...
|
7 | collect2: ld returned 1 exit status
|
8 | ...
|
Das sind noch ein paar mehr, aber alle Funktionen, die der Linker nicht
findet sind in einer Header-Datei, die auch eingebunden wird.
Die Funktionen sehen da so aus:
1 | extern inline u_short ezfb_get_r_from_rgb(struct ezfb* fb, u_int rgb)
|
2 | {
|
3 | switch(fb->Var.bits_per_pixel)
|
4 | {
|
5 | default:
|
6 | case 1:
|
7 | case 2:
|
8 | case 4: return 0;
|
9 | //--------------------------------------------------------------------
|
10 | case 8: return (int)(255 * (rgb & 0xe0) / 224.0); // based on ezfb_set_cmap_reduction();
|
11 | //--------------------------------------------------------------------
|
12 | case 15: // returns a scaled char ie: fb->Var.red.length bits to 8 bits
|
13 | case 16: { // by adding the top msb's to the otherwise zeros at the low end
|
14 | u_char c = (((rgb << EZFB_BITS_IN_CHAR) >> fb->colors.offset_plus_length_red) & fb->colors.bit_mask_red);
|
15 | return c |= ((c & ~((1 << fb->Var.red.length) - 1)) >> fb->Var.red.length);
|
16 | } // off is off and full on is 255
|
17 | //--------------------------------------------------------------------
|
18 | case 24:
|
19 | case 32: return (rgb >> fb->Var.red.offset) & fb->colors.bit_mask_red;
|
20 | }
|
21 | }
|
(Nur eine um zu sehen, wie genau die gemacht wurden.
Dass die in einer Header-Datei stehen, wundert mich ein wenig, aber die
Demos compilieren ja auch ohne Fehler/Warnungen durch. Daher wird das
schon seine Richtigkeit haben, oder?
Ich hoffe jemand von euch kann mir dabei helfen, das zu lösen :)