Verknüpfung scheine ich meine C zu vergessen ++ ...C++ mehrere Deklaration von Funktionsfehlern beim
Ich versuche, einige Funktionen in C in getrennten Quellen zu erklären, und einschließlich der entsprechenden .h
bei Bedarf. Es kompiliert OK; aber das Problem ist während des Linkens, wo der Linker über bereits definierte Funktionen klagt.
Ich habe sogar versucht, die Funktionen als extern
zu definieren, in einem (vergeblichen) Versuch, nur die Funktionen zu deklarieren und die Implementierung nur auf dem .c
wahr werden zu lassen.
Dies ist eine gekürzte Beschreibung meines Code:
common.h
#include <stdio.h>
module1.h
#include "common.h"
#ifndef MODULE1_H_
#define MODULE1_H_
int init(int option);
int open(char* db, char* username, char* password);
int get(int handler, int date[2], int time[2], int* data, int& rowsize, int& numrows);
int put(int handler, int* data, int& datasize, int& numrows);
int close(int handler);
int finalize();
#endif /* MODULE1_H_ */
module2.h
#include "common.h"
#ifndef MODULE2_H_
#define MODULE2_H_
int get1(int handler, int date, int time, int *data, int& datasize, int& rowsize);
int put1(int handler, int* data, int datasize);
#endif /*MODULE2_H_*/
module1.cpp
#include "module1.h"
int init(int option) { ... }
int finalize() { ... }
int get(int handler, int date[2], int time[2], int* data, int& rowsize, int& numrows) {
....
}
...
module2.cpp
#include "module1.h"
#include "module2.h"
int get1(int handler, int date, int time, int* data, int rowsize) {
int daterange[2]={date,date};
int timerange[2]={time,time};
int rsize, numrows, result;
result=get(handler, daterange,timerange, data, rsize, numrows);
rowsize=rsize;
if(numrows!=1) printf("Uh oh...\n");
return result;
}
...
Compilation & Verknüpfung:
g++ -o module1.o -c module1.cpp
g++ -o module2.o -c module2.cpp
g++ -fPIC -shared -o library.so module1.o module2.o
Wie gesagt, es kompiliert OK. Das Problem ist während der Verknüpfung, wo der Linker "sieht", dass es zwei implementierte Funktionen von module1.h
gibt: eine aus der Aufnahme von module1.h
in module1.cpp
; und die andere aus der Aufnahme von module1.h
zusammen mit module2.h
in module2.cpp
.
Ich weiß, dass die Funktionen deklariert werden sollen, aber ich mache offensichtlich einen Faux-pas. Könnte jemand bitte darauf hinweisen, wo es ist? Vielen Dank im Voraus.
Bitte geben Sie die aktuelle Fehlermeldung vom Linker ein. – SoapBox
Ich schlage vor, Sie fügen Ihrer Frage eine bestimmte Linker-Fehlermeldung hinzu. Ihre Funktionsnamen können mit integrierten Funktionen in Konflikt stehen. –
den tatsächlichen Code aus "include/ifx2f.h: 215", und die mehrere enthalten Guard für diesen Header. –