Frage

Dies ist eine Windows-Konsolenanwendung (eigentlich ein Dienst), dass ein früherer Mann vor 4 Jahren gebaut und installiert ist und läuft. Ich muss nun einige Änderungen vornehmen, aber die aktuelle Version nicht einmal bauen können! Hier ist die Build-Ausgabe:

--------------------Configuration: MyApp - Win32 Debug--------------------
Compiling resources...
Compiling...
Main.cpp
winsock.cpp
Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Main.obj : error LNK2001: unresolved external symbol _socket_dontblock
Debug/MyApp.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

MyApp.exe - 2 error(s), 1 warning(s)
--------------------------------------------------------------------------

Wenn ich /NODEFAULTLIB verwenden dann bekomme ich eine Menge Fehler. Der Code eigentlich nicht _socket_noblock verwenden, aber ich kann nichts auf es auf dem ‚Netz finden. Vermutlich wird es durch eine Bibliothek verwendet, ich bin Verknüpfung, aber ich weiß nicht, welche Bibliothek es in ist.

--- Alistair.

War es hilfreich?

Lösung 2

Sorry, das stellt sich heraus, ein internes Problem zu sein. Eine Kombination aus einem Einzelgänger Coder vor 4 Jahren und ein rostig no-nichts (mir!) Jetzt.

Der Code verwendet nicht _socket_noblock aber es funktioniert Verwendung socket_noblock und ich brauche nur zu einem unserer eigenen Bibliotheken zu verbinden.

Andere Tipps

LNK4098 kann kein Problem sein. Zum Beispiel kann es vorkommen, wenn Sie eine Release-Version von einiger Bibliothek verknüpfen gegen die statische Laufzeitbindung verwendet und verursacht LIBCMT (man beachte die Abwesenheit von „D“ Suffix) hinzugefügt werden Bibliotheken auf Standard. Ihre Anwendung in Debug Config gebaut wird, verwendet LIBCMT D , wodurch der Konflikt. Es kann tatsächlich sicher sein, vorausgesetzt, dass Sie nichts Runtime abhängig mit dieser Bibliothek auszutauschen sind.

Wie bei _socket_noblock, können Sie einige Suchprogramm (wie grep oder finden) verwenden für diese Zeichenfolge in OBJ und LIB-Dateien zu suchen. Auf diese Weise werden Sie die Bibliothek verweist auf das Symbol kennen, der ein Ausgangspunkt sein kann, zu entdecken, was die Bibliothek Abhängigkeiten hat.

Sie können mit „Dependency Walker“ - ein kostenloses Tool die Abhängigkeiten Ihrer Anwendung finden, die zu herauszufinden, wie Ihre Anwendung libcmtd ist die Verknüpfung. Edit: Sie können natürlich nicht verwenden, dass auf die neue Version, die (siehe Kommentare) keine Verbindung herstellen kann, aber man kann es auf der alten Version verwenden, oder auf bekannte Bibliotheken, die die neue Version Links mit.

Wie jedoch das eigentliche Problem war in keinem Zusammenhang mit etwas, was ich vorgeschlagen, vielleicht sollte die Frage geschlossen werden.

Es sieht aus wie Sie verschiedene Versionen der CRT verknüpft sind -. Möglicherweise, weil Sie alt gebaut Bibliotheken zusammen mit einem neuen Compiler und die Version der CRT verwenden

defaultlib „LIBCMTD“ Konflikte mit Verwendung anderer Libs ist eine Warnung, dass, dass Ihr Programm zeigt eine andere Version der Laufzeitbibliothek verwendet, die eine oder mehr Ihre Bibliotheken. Verwenden Sie die gleiche Laufzeit über das Programm und Bibliotheken, um die Warnung zu machen weggehen.

(Projekteinstellungen) (C ++ tab) Kategorie (Codegenerierung) (Nutzung der Laufzeitbibliothek)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top