下面这个例子演示了在不同编译选项时,所使用的C,C++运行时库:

makefile
---------------------------------------------------
all:test test_static test_dynamic

#默认:多线程静态链接
test:
 cl test.cpp /link user32.lib /out:test.exe
 
#多线程静态链接
#libcmt.lib C运行时静态库
#libcpmt.lib C++运行时静态库
test_static:
 cl /MT test.cpp /link /NODEFAULTLIB libcmt.lib libcpmt.lib \
 Kernel32.lib user32.lib /out:test_static.exe
 
#多线程动态链接
#msvcrt.lib C运行时导入库,执行期依赖于MSVCR90.dll
#msvcprt.lib C++运行时导入库,执行期依赖于MSVCP90.dll
test_dynamic:
 cl /MD test.cpp /link /NODEFAULTLIB msvcrt.lib msvcprt.lib \
 Kernel32.lib user32.lib /out:test_dynamic.exe

clean:
 del test.exe
 del test_static.exe
 del test_dynamic.exe
 del test_dynamic.exe.manifest
 del test.obj
 
#备注:
# /NODEFAULTLIB 选项忽略所有编译器默认链接的库。
# 用 dumpbin /DEPENDENTS test.exe 命令查看可执行文件的依赖关系。
# 示例程序使用 Visual Studio 2008 SP1 命令行编译。

test.cpp
----------------------------------------------------------

#include <stdio.h>
#include <iostream>
using namespace std;

#include <windows.h>

int main()
{
 //C运行时函数
 printf("Hello Runtime Library.\n");

 #ifdef _MT
  //C++运行时对象
  cout<<"/MT:_MT"<<endl;
 #endif
 
 #ifdef _DLL
  cout<<"/MD:_MT,_DLL"<<endl;
 #endif

 //C,C++运行时以外的函数
 //MessageBox的导入库是 user32.lib,执行期依赖于 USER32.dll
 MessageBox(0,"Hello Windows.","test",0);
 
 return 0;
}

 


本文链接地址: Visual Studio中的C,C++运行时库,动态链接库,静态链接库
http://qingfengju.com/index.asp?id=284

分类:Win32/C++ 查看次数:5473 发布时间:2012-4-19 23:55:05