Problem beim Kompilieren (Redhat 5)

A

Andimotz80

Grünschnabel
Hallo!

Ich habe ein c-Programm unter Redhat 4 programmiert. Wenn ich es jetzt uner RH5 kompeliere, bekomme ich folgende Fehlermeldung:

gcc -o vmps_new vmpss.c
/tmp/ccOoiq4W.o: In function `main':
vmpss.c:(.text+0x27): undefined reference to `initMain'
vmpss.c:(.text+0x4b): undefined reference to `InsertGlobalParameters'
vmpss.c:(.text+0x6f): undefined reference to `StartConversion'
vmpss.c:(.text+0xa0): undefined reference to `LogPrintf'
collect2: ld returned 1 exit status

Die Funktionen sind alle im Header im selben Verzeichnis definiert.

Was mache ich falsch?

Danke

Andreas
 
Sind die Funktionen in den Include-Files wirklich "definiert", oder nur deklariert und in einem anderen C-File definiert? Dann müsstest du dieses File mit übersetzen.

Gruss, A.
 
Wenn du weitere Dateien einbindest include "includedatei.c", musst die diese bei der Kompilierung mit angeben.
Also:
Code:
gcc datei.c includedatei.o
Oder mach einfach mal ein make clean, das hilft ab und an.
 
Zuletzt bearbeitet:
File functions.h:
#ifndef _FUNCTIONS_H
#define _FUNCTIONS_H

#include <stdarg.h>

#define LOGFILE "log.vmpss"

int initMain(int argc, char *argv[]);
int CheckConfig(char *configfile);
int deleteSpaceAndComment(char comment[1], char *row);
int CompareNetParameter(char *row);
int CheckNetAddress(char *row);
int CheckIPAdress(char *row);
int StartConversion(int argc, char *argv[]);
int get_networks(char *file, char *pnetwork[], char *pnetmask[], char *pstartip[], char *pendip[], char *pvlan[]);
int CheckNetworkExist(char network[], char netmask[], char vlan[], char *pnetwork[], char *pnetmask[], char *pvlan[], int net_numbers);
int CheckNetworkNetmask(char network[], char netmask[]);
int GetStartAndEndIp(char network[], char netmask[], char vlan[], char *pstartip[], char *pendip[], char *pvlan[], int ips_numbers);
int ConvertInputToOutput(char *infile, char *outfile, char *pstartip[], char *pendip[], char *pvlan[], int ips_numbers);
int GetIPAdress(char *pinputtext, char *pIpAdress);
int GetMacAdress(char *pinputtext, char *pMacAdress);
int GetVlan(char *pIpAdress, char *pVlan, char *pstartip[], char *pendip[], char *pvlan[], int ips_numbers);
int CheckAndChangeOutputFile(char *poutfile, char *pIpAdress, char *pMacAdress, char *pVlan);
int GetMacAdressOld(char *pinputtext, char *pMacAdress);
int DeleteLine(char *file, int line);
int AddLineInDHCP(char *poutfile, char *pIpAdress, char *pMacAdress, char *pVlan);
int InsertGlobalParameters(int argc, char *argv[]);
int SetHostsEntryUnsed(char startip[1024]);
int CheckAndChangeHostsEntry(char *pIpAdress, char *pMacAdress, char *pVlan);
void DeleteOldHostsEntry();
#endif


File: vmpss.c

#include <stdio.h>
#include <string.h>
#include <time.h>
#include "functions.h"
#include "logprintf.h"
#include "global.h"

#define SIZE 256

int main (int argc, char *argv[]) {
if(initMain(argc, argv)!=0) return 1;
else {
if(InsertGlobalParameters(argc, argv)!=0) return 1;
if(StartConversion(argc, argv)!=0) return 1;
else LogPrintf(LOGFILE, LOG_DEBUG, "vmpss %s running successfully", VERSION);
}

return 0;
}

Und es findetdie Funktionen nicht.

Bitte um Hilfe.

danke
 
Ich habs geschafft. Ich musste die obj-Files enhängen.

Danke an alle
 
Das gilt natürlich auch für Bibliotheken, was ich vergessen habe zu erwähnen:

Hier zur Sicherheit noch eine nützliche Liste der wichtigsten Optionen:
-o Output
-c Compile (ohne zu linken)
-I Include Verzeichnis der Includedateien
-I.Standard Include Verzeichnis verwenden
-L Libary Verzeichnis der Bibliotheken
-L.Standard Libary Verzeichnis verwenden
-ldateiname Name der Bibliotheksdatei


Unter Linux haben die Bibliotheken einen speziellen namen: lib+name+.so .
Deshalb kann die Bibliothek libtest.so einfach mit -ltest eingebunden werden.
 

Ähnliche Themen

Funktion nicht gefunden

Raspberry Pi custom Kernel

Linker meckert über nicht definierte Funktion

Schwierigkeiten beim compillieren

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben