So ermöglichen Sie -z multidefs mit g++47
Wie kann ich den linker g++
zu ermöglichen, dass mehrere Definitionen von Symbolen (wählen Sie die erste, Erscheinungsbild)?
-z multidefs Ermöglicht es, mehrere symbol-Definitionen. Standardmäßig mehrere symbol-Definitionen, die zwischen verschiebbare Objekte (.o-Dateien)
führt zu einem fatalen Fehler. Diese option unterdrückt die
Fehler und ermöglicht es, das erste symbol definition genommen werden.
Diese option ist nur gültig, wenn die-b-svr4-option angegeben ist.
Den -zmuldefs
option wird nicht erkannt von g++
noch -z OPTION
. Was ist der korrekte parameter? Ist es möglich?
- sollten Sie Nagel das Problem in der ersten code, warum haben Sie mehrere Definitionen?
- Beide ITK und opencv definieren encode-und decode-Funktionen von jasper. Dies verursacht keine Mühe, auf Linux, noch Windows, nur Mac (gcc47 von MacPorts). Der code ist nicht das problem. Ich habe es gelöst, indem compiling opencv ohne Jasper, aber ich möchte dennoch in der Lage sein, zu überwinden dieses Problem, indem es ermöglicht mehrere Definitionen der gleichen.
- Ich glaube, ich war mit dem -Xlinker-option falsch, ich habe es, Sie für jeden parameter, ich komme zurück, um es in einer Stunde.
- Sie haben mehrere Definitionen, die in einer compilation-unit, oder im paar? Ich war nicht in der Lage zu kompilieren mit "-z muldefs" wenn ich mehrere Definitionen in einer Datei, aber wenn ich Sie in zwei, kompiliert mit g++ -c, und dann mit g++ -z muldefs, ich habe nur Warnung "/usr/bin/ld: Warning: Größe symbol " add(int, int)' geändert von 18 im test.o bis 20, in test2.o"
- In paar. Aber die option wird gar nicht erkannt, so dass ich glaube, ich bin der Eingabe falsch gemacht.
- Mmh, ich habe erkannt, dass die
ld -z
auch ausspucken ùnrecognized option", der mir zu entdecken, dass Mac nicht verwenden, gnu ld.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine solche Sache als "linker g++", verwendet Ihr system den eigenen linker.
To-pass-Optionen von GCC den linker, müssen Sie die Nutzung der GCC -
-Wl,
oder-Xlinker
Optionen:So würden Sie wollen, um
oder
aber die docs, die Sie verstehen sagen, Sie müssen verwenden auch
-b svr4
um diese option verwenden, z.B.Edit: Aus Ihren Kommentaren sehe ich, du bist auf Mac OS X, welche mit der darwin-linker, und seine Mann Seite zeigt die entsprechende option ist veraltet:
ld
ist nicht der GNU-linker, da Sie nicht erkennen, diese Optionen. In der Tat-b
ist veraltet. Also, wie kann ich den linker zu ignorieren mehrere Definitionen?GCC verwendet
ld
als linker in linux, das ist Teilbinutils
erstellt von GNU.Scheint es, die neuere version von
ld
nicht unterstützen-z muldefs
option. Sie können versuchen, zu verwenden--allow-multiple-definition
als alternative.ld
vonGNU binutils
als der linker. Die neuesteGNU binutil
ist die version 2.28, scheint das nicht unterstützen-z muldef
option. Sie können--allow-multiple-definitions
als Ersatz.