Was bedeutet /FORCE:MULTIPLE
-
Hallo
Ich habe mir gestern eine Bibliothek namens wykobi runtergeladen und nach einigen Startprobleme, die schon in einem anderen Thread besprochen wurden, hatte ich am Ende nur noch solche Linkerfehler:
MyGeometrie.obj : error LNK2005: "double * wykobi::sin_table" (?sin_table@wykobi@@3PANA) already defined in Line.obj
MyGeometrie.obj : error LNK2005: "double * wykobi::cos_table" (?cos_table@wykobi@@3PANA) already defined in Line.obj
MyGeometrie.obj : error LNK2005: "double * wykobi::tan_table" (?tan_table@wykobi@@3PANA) already defined in Line.obj
MyGeometrieDoc.obj : error LNK2005: "double * wykobi::sin_table" (?sin_table@wykobi@@3PANA) already defined in Line.obj
MyGeometrieDoc.obj : error LNK2005: "double * wykobi::cos_table" (?cos_table@wykobi@@3PANA) already defined in Line.obj
MyGeometrieDoc.obj : error LNK2005: "double * wykobi::tan_table" (?tan_table@wykobi@@3PANA) already defined in Line.obj
MyGeometrieView.obj : error LNK2005: "double * wykobi::sin_table" (?sin_table@wykobi@@3PANA) already defined in Line.obj
MyGeometrieView.obj : error LNK2005: "double * wykobi::cos_table" (?cos_table@wykobi@@3PANA) already defined in Line.obj
MyGeometrieView.obj : error LNK2005: "double * wykobi::tan_table" (?tan_table@wykobi@@3PANA) already defined in Line.obj
Point.obj : error LNK2005: "double * wykobi::sin_table" (?sin_table@wykobi@@3PANA) already defined in Line.obj
Point.obj : error LNK2005: "double * wykobi::cos_table" (?cos_table@wykobi@@3PANA) already defined in Line.obj
Point.obj : error LNK2005: "double * wykobi::tan_table" (?tan_table@wykobi@@3PANA) already defined in Line.obj
Triangel.obj : error LNK2005: "double * wykobi::sin_table" (?sin_table@wykobi@@3PANA) already defined in Line.obj
Triangel.obj : error LNK2005: "double * wykobi::cos_table" (?cos_table@wykobi@@3PANA) already defined in Line.obj
Triangel.obj : error LNK2005: "double * wykobi::tan_table" (?tan_table@wykobi@@3PANA) already defined in Line.obj
fatal error LNK1169: one or more multiply defined symbols foundZu der Bibliothek gehören aber kein lib oder dllD-Dateien, sondern nur Header und inline Dateien. Ich ahbe diese alle in den gleichen Ordner entpackt und diesen Ordner VS05 bekannt gemacht. Dann habe ich einfach wykobi.hpp inkludiert und es folgen diese Fehler. Der Hersteller meinte dazu, dass ich es mit folgender Linkeroption (/FORCE:MULTIPLE) zu probieren. Damit kompiliert das Programm aber es folgen Warnungen:
Warning 1 warning LNK4075: ignoring '/INCREMENTAL' due to '/FORCE' specification MyGeometrie
Warning 2 warning LNK4006: "double * wykobi::sin_table" (?sin_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored MyGeometrie.obj
Warning 3 warning LNK4006: "double * wykobi::cos_table" (?cos_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored MyGeometrie.obj
Warning 4 warning LNK4006: "double * wykobi::tan_table" (?tan_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored MyGeometrie.obj
Warning 5 warning LNK4006: "double * wykobi::sin_table" (?sin_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored MyGeometrieDoc.obj
Warning 6 warning LNK4006: "double * wykobi::cos_table" (?cos_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored MyGeometrieDoc.obj
Warning 7 warning LNK4006: "double * wykobi::tan_table" (?tan_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored MyGeometrieDoc.obj
Warning 8 warning LNK4006: "double * wykobi::sin_table" (?sin_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored MyGeometrieView.obj
Warning 9 warning LNK4006: "double * wykobi::cos_table" (?cos_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored MyGeometrieView.obj
Warning 10 warning LNK4006: "double * wykobi::tan_table" (?tan_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored MyGeometrieView.obj
Warning 11 warning LNK4006: "double * wykobi::sin_table" (?sin_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored Point.obj
Warning 12 warning LNK4006: "double * wykobi::cos_table" (?cos_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored Point.obj
Warning 13 warning LNK4006: "double * wykobi::tan_table" (?tan_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored Point.obj
Warning 14 warning LNK4006: "double * wykobi::sin_table" (?sin_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored Triangel.obj
Warning 15 warning LNK4006: "double * wykobi::cos_table" (?cos_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored Triangel.obj
Warning 16 warning LNK4006: "double * wykobi::tan_table" (?tan_table@wykobi@@3PANA) already defined in Line.obj; second definition ignored Triangel.obj
Warning 17 warning LNK4088: image being generated due to /FORCE option; image may not runJetzt habe ich mehrer Fragen: Was bedeute diese Warnungen genau? Was bewirkt /FORCE:MULTIPLE? Gibt es eine Möglichkeit das Problem eleganter zu lösen?
Vielen Dank
chrische
-
http://msdn2.microsoft.com/en-us/library/70abkas3(vs.80).aspx
sin_,cos_ und tan_table sind anscheinend mehrfach definiert und mit dem /FORCE wird einfach die 1. Definition genommen.
-
Hallo
Gibt es andere Möglichkeit die Fehler zu verhindern? Diese Linkerfehler machen mich wirklich immer fertig.

Line und Point sind Klassen von mir.
chrische
-
Du mußt (und darfst) die Funktionsdefinitionen nur einmal in deinem Projekt eingebunden haben, sonst beschwert sich der Linker. Das bedeutet, daß du nur die Header einbinden mußt und die dazugehörige .CPP "nur" in dein Projekt einbinden mußt (damit sie mit compiliert wird, wenn du das Programm erstellst).
-
Hallo
Da gibt es keine cpp-Dateien, sondern nur inline-Dateien, die sich im selben, der IDE bekannten, Ordner befinden. Ich habe keine Datei des Projekt hinzugefügt.
chrische
-
chrische5 schrieb:
Gibt es andere Möglichkeit die Fehler zu verhindern? Diese Linkerfehler machen mich wirklich immer fertig.

die verschiedenen source files haben anscheinend ihre eigene sin/cos/tan table. du hast mehrere möglichkeiten:
1. schreibe vor jede table ein 'static', dann gilt die nur innerhalb des files, in dem sie definiert wurde.
2. ersetze duplikate durch 'extern typ name;' (beispiel: extern char sin_table[];)...aber (ganz wichtig) achte darauf, dass die tables sich nicht in ihrem inhalt unterscheiden.
