C技巧:VC中编译、运行程序的知识点(1)
) X: M! j, w2 N; g7 S. I1、Run-Time Library ( A0 A0 Y! J' I4 M0 \* r9 h" ]
Run-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。" J+ }5 P& U Z3 N, k3 r" e
我们一般使用的Run-Time Library是C Run-Time Libraries。当然也有Standard C++ libraries。; J& ?+ ~7 Y C2 R8 F. Y" V9 M
C Run-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。
8 E. g$ X: m+ w" m2 P C Run-Time Libraries有静态库版本,也有动态链接库版本;有单线程版本,也有多线程版本;还有调试和非调试版本。; D8 E, K9 z% X4 I. z2 y j2 M
可以在"project"-"settings"-"C/C++"-"Code Generation"中选择Run-Time Library的版本。2 e7 h2 x0 d2 B1 O9 f
动态链接库版本:
, O* T" c( o' u /MD Multithreaded DLL 使用导入库MSVCRT.LIB
, u$ R6 K7 T ~( p }7 @ /MDd Debug Multithreaded DLL 使用导入库MSVCRTD.LIB0 p6 N8 `4 _3 ]
静态库版本:
3 x$ H0 U/ l) r. A& Z! I /ML Single-Threaded 使用静态库LIBC.LIB% C5 D. L" @6 b- B
/MLd Debug Single-Threaded 使用静态库LIBCD.LIB
' J' a) ], x, j/ v3 `, a& [2 N /MT Multithreaded 使用静态库LIBCMT.LIB
4 Z4 j/ V" }% ]; X /MTd Debug Multithreaded 使用静态库LIBCMTD.LIB
1 B- e# W( I0 q2 y C Run-Time Library的标准io部分与操作系统的关系很密切,在Windows上,CRT的io部分代码只是一个包装,底层要用到操作系统内核kernel32.dll中的函数,在编译时使用导入库kernel32.lib。这也就是为什么在嵌入式环境中,我们一般不能直接使用C标准库。
" g6 A6 ?2 B, D$ c4 N 在Linux环境当然也有C标准库,例如:
# H/ s' a8 o( l% [ ld -o output /lib/crt0.o hello.o -lc3 H( {- q+ P* P& k6 P# v
参数"-lc"就是在引用C标准库libc.a。猜一猜"-lm"引用哪个库文件? |