2012-03-30 15 views
4

Da ich ein langjähriger POSIX/Linux/BSD C-Entwickler bin und jetzt versuche, ein paar Dinge mit Visual C++ 2010 zu tun, bin ich irgendwie mit den Werkzeugen beschäftigt, weil es nicht ganz so funktioniert wie das GCC-Toolset tut. In der Theorie, zumindest nach den Dokumenten, scheint es sehr ähnlich (und ich bin mir sicher, dass es ist), aber ich sehe nicht die Dinge, die ich erwarte zu sehen.Windows C Runtime-Bibliothek nicht verknüpfen, wie ich es erwarte?

In diesem Fall versuche ich eine C-Bibliothek für die spätere Verwendung in einem .NET-Projekt zu erstellen, und ich möchte darauf achten, später Laufzeitkonflikte zu vermeiden. Mein Gedanke war, eine statische Bibliothek zu erstellen, die mit einer DLL-Version der C-Laufzeit (msvcr100d.dll in der Debug-Konfiguration) verbunden ist, also setze ich das /MDd-Flag. Wenn ich dumpbin.exe verwende, um die resultierende LIB-Ausgabe zu überprüfen, zeigt es jedoch keine Abhängigkeiten oder Importe an.

Zwei Fragen, wirklich:

  1. Ist dies eine schlechte Idee in erster Linie? Soll ich stattdessen eine DLL erstellen oder eine Verknüpfung mit der statischen CRT herstellen?
  2. Warum zeigt dumpbin.exe die Abhängigkeit von der CRT, wenn ich /MDd verwende?

aktualisieren: Choosing the Correct C/C++ Runtime Library ist ziemlich hilfreich und informativ. Ich versuchte die dumpbin Beschwörung, die er vorschlägt, und die Ausgabe zeigt, dass die Bibliothek wie erwartet auf msvcrtd verlinkt, aber das beantwortet meine zweite Frage nicht wirklich oben.

+0

Wow. Ich bin immer noch Google suchen dieses Problem, und diese Frage ist bereits # 4 in Suchen mit "Dumpbin" und "Abhängige". Sie müssen diese Site ständig crawlen. –

+0

Wenn Sie nicht C++/CLI verwenden, sollte es fast identisch sein. Mit dem gesagt ... Code ... Bitte !! Wenn/Wenn Sie die Frage auf einen Punkt aktualisieren, an dem ich bestimmte Fragen beantworten kann, werde ich eine Antwort auf Ihre Fragen veröffentlichen. –

+0

@Ramhound: um ... der Code ist für diese Frage nicht relevant. Dies ist ein Werkzeugproblem. Ich habe spezifische Fragen bereits artikuliert. Wenn du sie nicht ansprechen kannst, liegt es nicht daran, dass ich das Problem nicht erklärt habe. –

Antwort

1

Da dies keine endgültige EXE oder DLL ist, gibt es keinen Importabschnitt. Stattdessen gibt es Linker-Anweisungen, die sagen, wie diese Bibliothek verknüpft werden möchte.

dumpbin /directives thoraway.lib 

Microsoft (R) COFF/PE Dumper Version 10.00.40219.01 
Copyright (C) Microsoft Corporation. All rights reserved. 


    Dump of file throwaway.lib 

    File Type: LIBRARY 

    Linker Directives 
    ----------------- 
    /FAILIFMISMATCH:"_MSC_VER=1600" 
    /FAILIFMISMATCH:"_ITERATOR_DEBUG_LEVEL=2" 
    /DEFAULTLIB:"msvcprtd" 
    /DEFAULTLIB:"MSVCRTD" 
    /DEFAULTLIB:"OLDNAMES" 
    /EDITANDCONTINUE 

Summary 

    CFC .debug$S 
     4C .debug$T 
     A2 .drectve 
     B .rdata 
     4 .rtc$IMZ 
     4 .rtc$TMZ 
     49 .text 
+0

Ah, ok. Das macht Sinn. Vielen Dank! –

Verwandte Themen