Bei Verwendung der Verknüpfungsoption "lazy linking" "-lazy-lz", auf die in this question verwiesen wird, verzögert das Laden einer abhängigen dynamischen Bibliothek den Linker, der Teil von Xcode 7.2.1 ist (Apple LLVM Version 7.0.2 (clang-700.1 0,81)), erzeugt diesen Fehler:Warum verursacht die Option "Lazy Linking" den Fehler "Illegale Datenreferenz"?
ld: illegal data reference to __ZN9WBRefSpecD1Ev in lazy loaded dylib
... wo die verstümmelten C++ Symbol der Klasse destructor dylib in meinem Single-Klasse verweist: _WBRefSpec :: ~ WBRefSpec()
ich kann‘ t eine direkte Referenz irgendwo finden, um anzuzeigen, was dieser Fehler möglicherweise bedeuten könnte - oder was könnte es verursachen.
EXPORT WBRefSpec::~WBRefSpec(void)
{
ClearEntireRefSpec(); // commenting out this call doesn't affect error message!
}
... wo EXPORT das üblich ist:
In der CPP-Datei wird der destructor definiert
#define EXPORT __attribute__((visibility("default")))
... und natürlich in der Header-Datei definiert als öffentliches Mitglied der Klasse:
~ WBRefSpec (void);
Wer hat das schon einmal gesehen oder hat eine Ahnung, was diesen Fehler verursacht?
EDIT/ANTWORT:
Die Antwort auf die illegale Datenreferenz war, dass es eine CPP-Datei mit einer Elementfunktion der Klasse definiert wurde, die deklariert „static WBRefSpec foo;“ Entfernt das und Bingo, kein Verbindungsfehler.
(entfernt Link Details, da sie nicht relevant für die Frage waren)
Post, wie Sie Ihr komplettes Programm erstellen/verknüpfen, bitte – xaxxon
Die Dylib muss wahrscheinlich einen nicht-faulen Zeiger mit dem anderen binden, um zu arbeiten. –
@xaxxon - Link-Einstellungen veröffentlicht (einige Pfade "bereinigt"). Soll ich es zur besseren Lesbarkeit formatieren? – SMGreenfield