Ich portiere die Anwendung mit alten Fortran Compiler und alten Visual Studio (VC5) zu neuen Fortran Compiler 11 und Visual Studio 2005. Anwendung enthält sowohl 'C' und Fortran-Code. Ich kompiliere den Fortran-Code und erstelle die Bibliothek namens server_lib.lib (die Bibliothek erstellt mit einigen Warnungen) und verlinke mit dem 'C'-Code. Während die Verknüpfung Anwendung gibt einige unten Linkfehler.Verknüpfungsfehler von C Sprache in Fortran-Bibliothek
2>Linking...
2>server_lib.lib(Preparx.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Query.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Utm.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Runvhf.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(PFLTPV.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Qdesic.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Headach.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Plotky.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Terrain.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Morpho.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Diflos.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Micro.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(OpenGL_F.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Violet.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Fieldp.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(Step.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>server_lib.lib(White.obj) : error LNK2005: _SERVERSTUFF already defined in server_lib.lib(Athena7.obj)
2>.\Debug/Server.exe : fatal error LNK1169: one or more multiply defined symbols found
oben "serverstuff" wird in server.For-Datei definiert und diese server.For wird in allen oben genannten Dateien enthalten. Sie finden den folgenden Codeblock von server.for Datei. Aber die Serverstuff-Variable wurde nur einmal in server.for definiert.
INTEGER iErrPipe !error code for pipe i/o
INTEGER clientIndex !index into client list
CHARACTER*136 Buffer(17) !buffer for pipe i/o
CHARACTER dBuffer(2313) !buffer for pipe i/o
EQUIVALENCE(dBuffer,Buffer)
COMMON/serverstuff/clientIndex,dBuffer
DATA dBuffer(2313)/0/
Warum gibt der obige Code einen Fehler bei der Deklaration? Wie es mit früheren Fortran Compilern funktioniert hat? Wenn ich die "COMMON/serverstuff/clientIndex, dBuffer" Zeile kommentieren, dann ist es perfekt verlinkt, aber die Anwendung ist abgestürzt.
Bitte geben Sie mir eine Idee, da ich nicht über Fortran Sprache weiß.
Es könnte nur ein Fehler im Compiler sein. Haben Sie das gesehen: http://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/56995/ – sharptooth