Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

11.03.2007, 22:08

/Force:Multiple - welche Folgen beim Benutzen??

Hallo!!
Ich bin gerade dabei ein paar OGRE Tutorials durchzugehen und da habe ich beim compilen einen Linker Fehler bekommen. Ich weiss leider nicht mehr genau welcher es war- ich habe dann aber herausgefunden, dass man da mit "/Force:Multiple" nachhelfen kann. Habe ich dann auch gemacht- hat dann daraufhin auch keine Probleme in dem Sinne mehr gehabt- ich hatte einen erfolgreichen Build. Jetzt wollte ich aber nochmal fragen, welche Folgen das hat wenn ich "/Force:Multiple" benutze und warum ich das benutzen muss (der Fehler war irgendwas, dass da 2 Objekte des gleichen Namens oder Types in der obj Datei gefunden wurde- ich muss die Nummer mal raussuchen!!)... hoffe ihr koennt mir trotz dieser sehr ungenauen Angaben weiterhelfen!!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

11.03.2007, 23:11

MSDN hilft:

Zitat

/FORCE:{MULTIPLE|UNRESOLVED}
This option tells the linker to create a valid .exe file or DLL even if a symbol is referenced but not defined or is multiply defined.

On the command line, the /FORCE option can take an optional argument:

Use /FORCE:MULTIPLE to create an output file whether or not LINK finds more than one definition for a symbol.
Use /FORCE:UNRESOLVED to create an output file whether or not LINK finds an undefined symbol.
IDE Settings (Project Settings dialog box)

Tab Category Control Setting
Link Customize Force file output Check or clear the control as needed.



--------------------------------------------------------------------------------

Send feedback on this topic to Microsoft

© Microsoft Corporation. All rights reserved.

Topic Version 7.1.2277.1013


Man muss nur unter "FORCE linker option" schauen. Der Index hilft oft beim Suchen ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

3

12.03.2007, 01:21

Mhh danke fuer den Tip!! Da frage ich einfach nochmal anders: Wenn er mir sagt, dass da ein "Symbol" mehr als einmal definiert ist- was heisst das- wie sieht mein Code aus oder was habe ich falsch gemacht, dass der diesen Fehler gibt?? Und was kann passieren wenn ich mit Force:Multiple ihn zwinge eine EXE zu erstellen obwohl da ein Symbol mehr als einmal definiert ist?? Was kann das fuer mein Programm bedeuten??

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

4

12.03.2007, 07:48

Vielleicht eine globale Variable oder Konstante im Header definiert? Falls ja so ändern:

C-/C++-Quelltext

1
2
3
4
5
//Header:

extern const float KONSTANTE;

//cpp

const float KONSTANTE = 1.0f;


Mir passiert das egtl wenn dann nur mit Konstanten.. Alternativ kannste auch die Konstante als static innerhalb einer Klasse deklarieren und dann wieder in der cpp definieren.

Dir ist hoffentlich klar dass das erzwingen der Erzeugung der exe nur eine Notlösung sein kann... Wie genau dein Prog reagiert wirst du selbst herausfinden müssen.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

12.03.2007, 10:36

Naja, der Fehler verhindert, dass man unterschiedliche Definitionen von ein und der selben Sache hat. Denn was passiert, wenn man von der einen Definition ausgeht, der Kompilier allerdings die andere Definition nutzt? Das Verhalten wird also unbestimmt. Wie es zu dem Fehler kommen kann? Naja Klassen/Unionen/Strukturen/Konstanten mit gleichen Namen, mehrfach Includierung und/oder keine Guards(#pragma once oder #ifndef #def #endif). Das ist so alles was ich zu dem Thema weiß.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

6

12.03.2007, 11:34

Wie gesagt das kann auch mit include guards und nur einer einzigen variable des namens passieren, nämlich wenn man eine variable in einer header datei definiert.

7

12.03.2007, 13:57

Vielen Dank fuer die Tips!! Ich werde das alles nochmal checken...was mich halt irritiert hat war, dass das ein Ogre Tutorial war und ich eigentlich nur ganz stupide Code abgetippt habe- den werde ich heute aber nochmal genau checken!!

Und dass das mit dem Force:Multiple nur eine Notloesung war war mir irgendwie klar..kann ja gar nicht richtig sein wenn ich ihn da zwinge einen Fehler zu ignorieren..desshalb der Post ;)

Werbeanzeige