Windows C Runtime-biblioteket forbinder ikke som jeg forventer?

Indlæg af Hanne Mølgaard Plasc

Problem



At være en langsigtet POSIX/Linux/BSD C-udvikler og nu forsøger at gøre et par ting med Visual C ++ 2010, er jeg meget fumlende rundt med værktøjet, fordi det ikke virker helt det samme som GCC-værktøjssættet gør. I teorien synes det i det mindste ifølge dokumenterne meget ligner (og jeg er sikker på det), men jeg kan ikke se de ting, jeg forventer at se.


I dette tilfælde forsøger jeg at bygge et C-bibliotek til senere brug i et .NET-projekt, og jeg vil være forsigtig med at undgå løbekonflikter senere. Min tankegang var at opbygge et statisk bibliotek, der er knyttet til en DLL-version af C runtime (msvcr100d.dll i Debug config), så jeg sætter /MDd flag. Men når jeg bruger dumpbin.exe for at inspicere den resulterende .lib-udgang, vises det ingen afhængige eller importerede.


To spørgsmål, virkelig:



  1. Er dette en dårlig ide i første omgang? Skal jeg bygge en DLL eller forbinde den statiske CRT i stedet?

  2. Hvorfor viser ikke afhængigheden af ​​CRT, når jeg bruger /MDd?



Opdater : At vælge det korrekte C/C ++ Runtime Library er ret nyttigt og informativt. Jeg forsøgte den dumpbin incantation han foreslår, og udgangen viser, at lib'en linker til msvcrtd som forventet, men det svarer mig ikke rigtigt til mit andet spørgsmål ovenfor. [8]

Bedste reference


Fordi dette ikke er en endelig EXE eller DLL, er der ingen import sektion. I stedet er der linker direktiver, der siger, hvordan denne lib gerne vil være forbundet.


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