Vermeidlicher Linkerfehler.... ????
-
Hallo zusammen,
ich hab ehrlich gesagt mein letztes C++ Programm vor einigen geschrieben und bin jetz beruflich dazu gezwungen wieder mit C zu programmieren. Also verzeiht mir bitte falsche oder nicht ausreichend erläuterte Sachen (falls falsche Tatsachen berichtigt werden bitte korrigieren)Vorab möchte ich noch sagen dass alle nachfolgend beschriebene Projekte mit der Laufzeitbiblothek Multithreaded-Debug genutz werden. Ziel meinerseits ist es eine einzelne Anwendung zu schaffen die sämtliche notwendigen Funktionen (Biblotheken) beinhaltet und auf keinerlei DLLs (ausser den Windowsstandards wie winmmlib oder streambase) zugreifen muss.
Problem:
Ich habe ein Projekt A dass ich als statische Bibliothek ausgebe. Compilierung fehlerfrei. Dann habe ich ein Projekt B dass ich ebenfalls als statische Bibliothek ausgebe. Projekt B nutz Funktionen aus Projekt A (Projekt B bindet A als Library ein.... sieht man an der Dateigröße) Compilierung von Projekt B funktioniert problemlos. Dann gibt es noch Projekt C dass ich finale Anwendung compiliere. Projekt C wiederum ist mit Projekt B verlinkt. Bei der Compilierung von Projekt C kommen jedoch compilerfehler der Form.ProjektB.lib(SomeClassInProjektB.obj) : error LNK2019: Nicht aufgelöstes externes Symbol '"__declspec(dllimport)
Ich gehe davon aus dass die Verlinkung von der ProjektA.lib in Projekt B nicht funktioniert weiß aber beim besten Willen nicht warum. Ursprünglich waren die Projekte so angelegt dass Projekt A und B als DLL´s ausgegeben und im Projekt C einfach eingebunden wurden. Das hat soweit auch gut funktioniert. Leider ist es nun nötig die Anwendung so umzuschreiben dass die gesamte Funktionalität in der finalen Exe vorhanden ist.
Kann mir jme. helfen oder nen typ geben???? Liegts an den Projekteinstellungen???
Bin dankbar für jede Hilfe.....
-
Hallo,
sind da noch irgendwelche __declspec(dllimport)/__declspec( dllexport )-Attribute in irgendeinem Projekt vorhanden? Die gehören da nicht mehr hin, denn jetzt wird doch nichts mehr aus/von DLLs importiert/exportiert?
MfG,
Probe-Nutzer
-
Ja na das nen ich doch mal ne schnelle Antwort. Du hattest übrigens Recht da gab es noch ein __declspec(dllexport). Hab ich gleich mal rausgenommen. Jetz bekommt er aber nen haufen Fehlermeldungen ala "error LNK2005: _fopen bereits in LIBCMTD.lib(fopen.obj) definiert". Hmmmm irgendwas ist da doppelt verlinkt?!??!?
OK vielen Dank erstmal....
-
Dann musst du noch einmal überprüfen, ob ProjektA.lib, ProjektB.lib und Projekt C tatsächlich mit der gleichen Laufzeitbibliotheks-Variante gelinkt werden. Du hast zwar geschrieben, dass dort alles gleich sein soll, aber dieser Fehler deutet eher nicht darauf hin.
MfG,
Probe-Nutzer
-
Danke erstmal für die schnelle Antwort...
leider bin ich nach nochmaliger Überprüfung zu 100% sicher dass alle Projekte mit der gleichen Laufzeitbibliothek gelinkt wurden. Alle mit Multithreaded-Debug.Mfg Skorpien126
-
Ich konnte die Fehlermenge reduzieren indem ich die Libcmtd.lib zu der "Bibliothek ignorieren"-Liste hinzugefügt habe. Jetz sind noch
simpleTest error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (??0?char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) bereits in ProjektB.lib(SomeClassofProjectB.obj) vorhanden. Jme ne Ahnung welche Bibliothek ich jetz noch ausschließen muss.... ???
MfG Skorpien126
-
Solved... LIBCMTD.lib beim zweiten zur Ignorierliste hinzugefügt. Anschließend nachmal die Linker-Optionen gecheckt und siehe da ich hatte wirklich vergessen eine kleine unscheinbare lib einzubinden.
Mega-DAnke an ProbeUser