大家好我写了一个dll,要发布,用dependency 看了一下,这个dll用到了mscvp71.dll msvcr71.dll mfc71.dll。
但实际上,我根本找不到用这几个库的地方,或者头文件。我想问一下,有没有什么方法,将mfc的头文件和库的对应关系找出来? 
比如 调用msvcp71.dll的mfc头文件有a.h、b.h或者 cc.h调用了 xx.dll  xxx.dll 

解决方案 »

  1.   

    加编译选项,然后rebuild。可以看到编译哪个.h的时候调用哪个dll
      

  2.   

    在各个头文件卡查看的#pragma comment(lib, "XXXX.lib")
      

  3.   

    这几个库的使用是在工程属性的编译选项中设置的:MFC 的使用 
    指定 MFC 项目是否将静态或动态链接到 MFC DLL。非 MFC 项目可以选择“使用标准 Windows 库”链接到使用 MFC 时包括的各种 Win32 库。
    /MD、/ML、/MT、/LD(使用运行时库)这些选项选择单线程或多线程运行时例程,指示多线程模块是否为 DLL,并选择运行时库的发布版本或调试版本。选项 说明 
    /MD  定义 _MT 和 _DLL 以便同时从标准 .h 文件中选择运行时例程的多线程特定版本和 DLL 特定版本。此选项还使编译器将库名 MSVCRT.lib 放入 .obj 文件中。 
    用此选项编译的应用程序静态链接到 MSVCRT.lib。该库提供允许链接器解析外部引用的代码层。实际工作代码包含在 MSVCR71.DLL 中,该库必须在运行时对于与 MSVCRT.lib 链接的应用程序可用。当在定义了 _STATIC_CPPLIB (/D_STATIC_CPPLIB) 的情况下使用 /MD 时,它将导致应用程序通过静态多线程标准 C++ 库 (libcpmt.lib) 而非动态版本 (msvcprt.lib) 进行链接,同时仍通过 msvcrt.lib 动态链接到主 CRT。
     
    /MDd  定义 _DEBUG、_MT 和 _DLL,以便从标准 .h 文件中选择运行时例程的调试多线程特定版本和 DLL 特定版本。它还使编译器将库名 MSVCRTD.lib 放入 .obj 文件中。  
    /ML  使编译器将库名 LIBC.lib 放入 .obj 文件中,以便链接器使用 LIBC.lib 解析外部符号。这是编译器的默认操作。LIBC.lib 不提供多线程支持。  
    /MLd  定义 _DEBUG 并使编译器将库名 LIBCD.lib 放入 .obj 文件中,以便链接器使用 LIBCD.lib 解析外部符号。LIBCD.lib 不提供多线程支持。  
    /MT  定义 _MT,以便从标准头 (.h) 文件中选择运行时例程的多线程特定版本。此选项还使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析外部符号。创建多线程程序需要 /MT 或 /MD(或它们的调试等效选项 /MTd 或 /MDd)。  
    /MTd  定义 _DEBUG 和 _MT。定义 _MT 会导致从标准 .h 文件中选择运行时例程的多线程特定版本。此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中,以便链接器使用 LIBCMTD.lib 解析外部符号。创建多线程程序需要 /MTd 或 /MDd(或它们的非调试等效选项 /MT 或 MD)。  
      

  4.   

    十分感谢Mackz,你的说明很清晰。
    也感谢上边两位的支持。我找到一篇对c 和 c++ 运行库和连接的说明,感觉很不错,给大家以共享。
    http://blog.csdn.net/ATField/archive/2007/03/11/1526253.aspx