2016-04-11 7 views
0

Momentan versuche ich Binärdateien für das AT91SAM7S256 mit SEGGER zu kompilieren, und ich habe ein Problem in der Linking-Phase (Quelldateien alle kompilieren) wo jede Datei, die verwendet von "lib_AT91SAM7S64.h" hat mehrere undefinierte Referenzen beim Versuch, eine Verknüpfung herzustellen.Fehler beim Verlinken: Undefinierter Verweis auf Funktion

Hier ist ein Beispiel für einige der Fehlermeldungen:

Output/Executable_1 Debug/Obj/AdcInterface.o: In function `initializeADCInterface': 
undefined reference to `AT91F_PIO_CfgInput' 
undefined reference to `AT91F_PIO_InterruptEnable' 
undefined reference to `AT91F_PIO_GetInterruptStatus' 

Die Sache ist, dass diese Funktionen „undefiniert“ that're innerhalb der „lib_AT91SAM7S64.h“ Datei definiert sind. Ich weiß nicht, was ich tun soll, da ich während der Verbindungsphase nie Fehler bekommen habe.

Ich benutze keine Makefiles oder irgendetwas. Dieses Projekt wurde ursprünglich mit Green Hills Software entwickelt, kompiliert und baut jedoch ohne Probleme auf dieser IDE. Ich habe jedoch keinen Zugang zu Green Hills Software und habe versucht, SEGGER dazu zu bringen, dies zu kompilieren.

+1

Die Funktionen könnten _declared_ in der .h-Datei sein, aber sie sind nicht _defined_ in der .h-Datei. Wie geben Sie die Bibliotheksdatei in den Projekteigenschaften oder in der Befehlszeile an? – kkrambo

+1

Sind sie wirklich _defined_ in der Kopfzeile - dh eine statische Inline-Implementierung - oder nur _declared_, denn ohne weitere Details sieht es einfach wie Ihre typische "vergessen, eine externe Bibliothek an den Linker zu übergeben" oder "interdependenten Objekte in der falschen Reihenfolge zu verknüpfen" Problem, die genau die Art von Dingen sind, die sich zwischen verschiedenen IDE-generierten Build-Befehlen unterscheiden können. – Notlikethat

+0

Danke, Notlikethat. Wie sich herausstellte, gab es einige Deklarationsprobleme in der Header-Datei. "__inline" wurde verwendet, daher habe ich am Anfang der Datei "#define __inline static inline" eine Definition hinzugefügt und die Probleme, die mit den nicht definierten Funktionen zusammenhängen, verschwanden. –

Antwort

1

Fast sicher verknüpfen Sie nicht in der Bibliothek, die den tatsächlichen Code zu diesen Funktionen hat. Die .h definiert sie nur so, dass anderer Code diese Funktionen korrekt aufrufen kann.

Sie müssen (irgendwie) die .a angeben, die diese Symbole enthält. Ich bin mir nicht sicher, ob das bedeutet, dass Sie Ihr Makefile bearbeiten müssen, oder fügen Sie dem Projekt einige .a hinzu, oder geben Sie in der IDE an, mit welcher Hardware Sie arbeiten. Tut mir leid, ich benutze SEGGER nicht, also kenne ich diese Details nicht. Hoffentlich ist dies genug, um vorwärts zu bewegen, um Ihre Lösung zu finden.