2012-04-09 6 views
0

Ich verwende ifort und bekomme einen Linkfehler, wenn ich versuche, meine Programme mit Compiler-Optionen zu kompilieren. Trotzdem habe ich diese Optionen auf ein sehr kleines einfaches Programm getestet, das gleiche Problem.Compiler-Optionen auf Linux-Box in Ifort

Ich vermute daher, dass es mit der Art und Weise zu tun hat, dass ifort installiert wurde oder die Art von System, das ich verwende, aber ich kann nicht sicher sein. Diese Programme kompilieren in Ordnung, wenn sie ohne Optionen kompiliert werden. Meine Frage ist, was mache ich falsch ist es eine Möglichkeit, diese Fehler nicht zu haben, während die Compiler-Optionen oder die Compiler-Optionen einfach nicht kompatibel mit dem System, das ich verwende.

hier ist, wie das Programm regelmäßig kompiliert wird:

ifort -free testrealprint.out testrealprint.f90 

hier ist, wie das Programm mit Optionen kompiliert wird:

ifort -free -O2 -stand f03 -check all -traceback -warn all -fstack-protector - assume protect_parens -implicitnone testrealprint.out testrealprint.f90 

hier ist der sehr einfache Code, dass ich das testen, bin mit Compiler-Optionen:

Hier ist ein Teil der Fehlermeldung, die ich erhalte, wenn ich Th. verwende e Compiler-Optionen:

testrealprint.out: In function `_start': 
(.text+0x0): multiple definition of `_start' 
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib64/crt1.o:(.text+0x0): first  defined here 
    testrealprint.out: In function `_fini': 
    (.fini+0x0): multiple definition of `_fini' 
    /usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib64/crti.o:(.fini+0x0): first  defined here 
    testrealprint.out:(.rodata+0x0): multiple definition of `_IO_stdin_used' 
    /usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib64/crt1.o: (.rodata.cst4+0x0): first defined here 
     testrealprint.out: In function `__data_start': 
    (.data+0x0): multiple definition of `__data_start' 
    ld: error in testrealprint.out(.eh_frame); no .eh_frame_hdr table will be created. 
+0

erhalten Sie versuchen, den Compiler benennen die endgültige ausführbare Datei als 'thre Realprint.out '? – talonmies

+0

ja, ich versuche es. –

Antwort

5

Es ist sehr viel sieht aus wie Sie für die Benennung der ausführbaren eine Befehlszeilenoption fehlen vom Compiler ausgegeben. Ich nehme an, Sie so etwas wie dies eigentlich wollen (man beachte die -o Option):

ifort -free -O2 -stand f03 -check all -traceback -warn all -fstack-protector -assume protect_parens -implicitnone -o testrealprint.out testrealprint.f90 

Der Fehler, den Sie sehen werden, ist wahrscheinlich, weil Sie die Compiler sagen zu versuchen, eine ausführbare Datei zu machen, indem testrealprint.f90 Kompilieren und Linken es dann mit den existierendes ausführbarestestrealprint.out. Aus diesem Grund erhalten Sie doppelte Symbolfehler vom Linker - Sie versuchen, eine vorhandene Anwendung in den aktuellen Linker-Aufruf zu verknüpfen. Ich bin irgendwie überrascht, dass Sie nicht eine Datei nicht gefunden Fehler beim Versuch der Übersetzung ohne eine vorhandene testrealprint.out im Suchpfad ....

+0

Ja, das scheint es zu tun. Der Grund, dass ich keine Datei nicht gefunden bekomme, liegt daran, dass ich bereits eine Testversion von einer Standardversion in meinem Verzeichnis hatte. Ihre Antwort macht daher einen Sinn. –

+1

@JourdanGold: Wenn diese Antwort Ihr Problem gelöst hat, würden Sie vielleicht so freundlich sein, [es zu akzeptieren] (http://meta.stackexchange.com/q/5234/163653)? – talonmies