Hey,
was "neues" aus C. Ich habe mir folgendes gebaut, hier in Kurzform.
parameter.h
parameter.c
und
test.c
Kompiliere ich nun nur die parameter.c mittels
ist der Error
Dabei spielt es keine Rolle, ob die Deklaration der Variablen innerhalb der main statt findet, oder nicht.
Die beiden *.o (test.o, parameter.o) werden am Ende gelinkt. Allerdings ist ja bereits zu sehen, dass die parameter.o nicht erzeugt wird.
Also: Was mache ich falsch?
Auch wenn ich die parameter.c vollständig in die parameter.h (natürlich ohne main..) kopiere und lösche, bekomme ich den Fehler:
was "neues" aus C. Ich habe mir folgendes gebaut, hier in Kurzform.
parameter.h
Code:
#ifndef PARAMETER
#define PARAMETER
#include <stdint.h>
extern const uint32_t p[2];
#endif
parameter.c
Code:
#include "parameter.h"
const uint32_t p[2]={0xFF12345A, 0x3C};
void main(){}//<-- nötig?
und
test.c
Code:
#include "parameter.h"
void do(uint32_t A)
{
A[0] += p[0];
A[1] += p[1];
}
void main()
{
uint32_t A[2] = {1,1};
do(A);
}
Kompiliere ich nun nur die parameter.c mittels
Code:
arm-none-eabi-gcc parameter.c -o parameter.o
Code:
gnu-gcc/6 2017-q1-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib\libc.a(lib_a-exit.o): In function `exit':exit.c:(.text.exit+0x2c): undefined reference to `_exit'collect2.exe: error: ld returned 1 exit status
Dabei spielt es keine Rolle, ob die Deklaration der Variablen innerhalb der main statt findet, oder nicht.
Die beiden *.o (test.o, parameter.o) werden am Ende gelinkt. Allerdings ist ja bereits zu sehen, dass die parameter.o nicht erzeugt wird.
Also: Was mache ich falsch?
Auch wenn ich die parameter.c vollständig in die parameter.h (natürlich ohne main..) kopiere und lösche, bekomme ich den Fehler:
Code:
test.c:(.text+0x2c): undefined reference to `p'
collect2.exe: error: ld returned 1 exit status
make: *** [test/test.elf] Error 1
Zuletzt bearbeitet: