LNK2028 und LNK2019



  • Hallo,

    Ich habe es geschafft, eine c# DLL in meinem Projekt zu nutzen (siehe mein erster Beitrag :-))

    Nun stehe ich vor folgendem Problem: Wenn ich im Debug-Modus kompiliere funktioniert es ohne größere Probleme. Nur wenn ich den Release Modus wähle kommt folgende Fehlermeldung:

    2> testApp.cpp
    2> Alle Ausgaben sind aktuell.
    2> .NETFramework,Version=v4.0.AssemblyAttributes.cpp
    2>LINK : warning LNK4075: /INCREMENTAL wird aufgrund der Angabe von /OPT:ICF ignoriert.
    2>ofxOscReceiver.obj : error LNK2028: Nicht aufgelöstes Token (0A000BA3) ""public: void __thiscall Poco::RefCountedObject::duplicate(void)const " (?duplicate@RefCountedObject@Poco@@$$FQBEXXZ)", auf das in Funktion ""public: __thiscall Poco::ActiveResult<void>::ActiveResult<void>(class Poco::ActiveResult<void> const &)" (??0?ActiveResult@X@Poco@@ActiveResult@X@Poco@@FQAE@ABV01@@Z)" verwiesen wird. 2>testApp.obj : error LNK2028: Nicht aufgelöstes Token (0A000BAE) ""public: void \_\_thiscall Poco::RefCountedObject::duplicate(void)const " (?duplicate@RefCountedObject@Poco@@FQBEXXZ)", auf das in Funktion ""public: \_\_thiscall Poco::ActiveResult::ActiveResult(class Poco::ActiveResult const &)" (??0?ActiveResult@X@Poco@@$$FQAE@ABV01@@Z)" verwiesen wird.
    2>main.obj : error LNK2028: Nicht aufgelöstes Token (0A000B97) ""public: void __thiscall Poco::RefCountedObject::duplicate(void)const " (?duplicate@RefCountedObject@Poco@@$$FQBEXXZ)", auf das in Funktion ""public: __thiscall Poco::ActiveResult<void>::ActiveResult<void>(class Poco::ActiveResult<void> const &)" (??0?ActiveResult@X@Poco@@ActiveResult@X@Poco@@FQAE@ABV01@@Z)" verwiesen wird. 2>ofxDelaunay.obj : error LNK2028: Nicht aufgelöstes Token (0A000AE6) ""public: void \_\_thiscall Poco::RefCountedObject::duplicate(void)const " (?duplicate@RefCountedObject@Poco@@FQBEXXZ)", auf das in Funktion ""public: \_\_thiscall Poco::ActiveResult::ActiveResult(class Poco::ActiveResult const &)" (??0?ActiveResult@X@Poco@@$$FQAE@ABV01@@Z)" verwiesen wird.
    2>ofxDelaunay.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall Poco::RefCountedObject::duplicate(void)const " (?duplicate@RefCountedObject@Poco@@$$FQBEXXZ)" in Funktion ""public: __thiscall Poco::ActiveResult<void>::ActiveResult<void>(class Poco::ActiveResult<void> const &)" (??0?ActiveResult@X@Poco@@ActiveResult@X@Poco@@FQAE@ABV01@@Z)". 2>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall Poco::RefCountedObject::duplicate(void)const " (?duplicate@RefCountedObject@Poco@@FQBEXXZ)". 2>testApp.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall Poco::RefCountedObject::duplicate(void)const " (?duplicate@RefCountedObject@Poco@@FQBEXXZ)". 2>ofxOscReceiver.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall Poco::RefCountedObject::duplicate(void)const " (?duplicate@RefCountedObject@Poco@@$FQBEXXZ)".
    2>bin\oscSenderExample.exe : fatal error LNK1120: 5 nicht aufgelöste externe Verweise.

    (Sorry für die ewig langen Meldungen, wollte nur sichergehen, dass ich nicht irgendwas übersehen habe)

    Ich nutze für das Projekt OpenFrameworks, welches auch die Poco-Bibliotheken beinhaltet, welche scheinbar den Fehler verursachen. Ich habe in den Projekteinstellungen auch auf die entsprechenden LIBs verwiesen, wo ich eigentlich den Fehler vermutet hätte.
    Ich habe auch aus "Verzweiflung" fast sämtliche Einstellungen aus der Debug-Einstellung übernommen, dennoch bekomme ich den Fehler.

    Wenn ich nur den Debug-Modus bräuchte, wäre ja alles in Ordnung, nur muss ich das Programm auch in Zukunft auf Rechnern ohne Visual Studio nutzen können...

    Nach dem, was ich gelesen habe kann es wohl durch das Nutzen von CLI zu diesem Fehler kommen? Kann mir jemand einen Tipp geben, was ich machen kann?

    vielen Dank schonmal!



  • Du musst die POCO Lib im Release Mode auch dazulinken. Nicht nur im Debug Mode.
    Checke deine Linker Settings.

    Dein Problem hat rein gar nichts mit .NET oder C++/CLI zu tun.



  • Die LIB ist auch im Release Mode verlinkt. Hierzu gibt es auch exta die Release Varianten (PocoFoundationmt.lib, PocoFoundationmt.lib, PocoUtilmt.lib, PocoXMLmt.lib), welche ich im Linker unter zusätzliche Abhängigkeiten angegeben habe...
    Im Debug Modus sind diese als PocoFoundationmtd.lib, PocoFoundationmtd.lib, PocoUtilmtd.lib, PocoXMLmtd.lib verlinkt.

    Auch die Pfade stimmen...



  • Benutze mal das /VERBOSE Flag bei den Linker Commandline.



  • Ok, Verbose liefert folgende Ausgaben (ein bischen sehr Verbose 🙂 ):

    http://cid-b3b5d0fa0e2396f3.office.live.com/self.aspx/.Public/debug.txt

    Im debug Modus bekomme ich folgende Ausgaben (falls es bei der Fehlersuche hilfreich ist):

    http://cid-b3b5d0fa0e2396f3.office.live.com/self.aspx/.Public/release.txt

    edit: habe die Dateien als Link angegeben, da das Forum so lange einträge nicht erlaubt...



  • edit: mit letztem Post zusammengefasst



  • falls das eventuell hilft:

    ich konnte das Problem bei einem einfachen Versuch reproduzieren. Wenn ich eines der Beispielprojekte von Openframeworks öffne und bei diesem im Releaase Mode die /clr Option einschalte, bekomme ich zunächst die Meldung, dass /clr nicht mit /EHs kompatibel ist. Wenn ich die C++ Ausnahmen statt /EHsc auf Nein stelle, läuft der Compile-Vorgang zwar durch, allerdings kommt es zu genau der selben Fehlermeldung wie bereits ganz oben beschrieben.

    Ganz anders im Debug Modus. Wenn ich hier /clr aktiviere werden folgende Einstellungen als inkompatibel angezeigt:
    /ZI -> habe ich auf /Zi oder /Z7 geändert
    /Gm -> habe ich auf /Gm- geändert
    /EHS -> habe ich auf "Nein" gesetzt
    /RTC1 -> habe ich auf "Standard" gesetzt
    Dann funktionieren sowohl Compiler als auch der Linker, und ich kann das Programm starten.

    Wenn ich die gleichen Einstellungen für den Release Modus übernehme, komme ich trotzdem zum selben Fehler...


Anmelden zum Antworten