Statische funktion

hallo zusammen,
beim compilieren einen c++ projekt in KDevelop in linux 8.1 pro bekomme ich die Fehlermeldung

multiple defined:[funktionsname].
ich habe die Fehler gefolgt. die funktion ist tatsächlich zwei mal definiert einmal als
static in einem modul und einmal global definiert und mit extern declariert in einem zweiten
modul.
das problem darf nicht sein weil static funktion ist nur innerhalb des modules gültig wo sie
definiert ist.
was mich noch bewundert ist dass das projekt sich einwandfrei compilieren lässt mit visual
studio in windows.
das gleiche problem kommt auch mit globale variablen vor.

kann mir jemand das erklären.
bis dahin muss ich jetzt alle betroffene static funktionen umbenen.

youssef

Kannst Du die Funktionsprototypen/-köpfe in den einzelnen Modulen wiedergeben?

ich hab mal folgendes gemacht:

main.c:

extern int Func( int i );

int main( int argc, char* argv[] )
{
return Func( 1 );
}

func.c:

int Func( int i )
{
return -i;
}

mod.c:

static int Func( int i )
{
return ++i;
}

habe folgende compiler probiert:

borland turbo c 2.0
microsoft c/c++ 9.0
intel c/c++ 2.4

bei denen gibts keine probleme;

achtung folgender quellcode produziert keinen compile fehler,
sehr wohl aber den von dir genannten link fehler:

proggi.cpp

namespace None
{

#ifdef __cplusplus
extern „C“ {
#endif

int Func( int i )
{
return ++i;
}

#ifdef __cplusplus
}
#endif

};

namespace Ntwo
{

#ifdef __cplusplus
extern „C“ {
#endif

double Func( double dbl )
{
return dbl + 1.0;
}

#ifdef __cplusplus
}
#endif

};

int main( int argc, char* argv[] )
{
int i = None::Func( 1 );
double dbl = Ntwo::Func( 1.0 );

return 0;
}

ohne diesen extern „C“ { … } konstrukten würde es zu keinem Link-Fehler kommen, weil der compiler sogenannte dekorierte Namen geniert, was man eben mit diesem Konstrukt abdreht, um für den C-compiler kompatible Namen zu bekommen; damit wird es möglich auch in C++, die alten C-Bibliotheken zu verwenden;

Walter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]