请问一下有关LIB和头文件的问题

monk_CD 2012-02-28 02:24:24


通常我们编程的时候,会包含一些头文件,像:#include<iostream>, 这时只包含了这个头文件,所以一定要有实现的代码,一般实现的代码的文件都是以lib和DLL结尾的文件,所以我们要在编译器中使用lib,有2种方法,一种是像:#pragram comment(lib,"xxx.lib"),一种是在附加依赖项中指定要使用的LIB!


但是我只在编译器中的附加依赖项中看到了:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib

这几个默认的LIB,并没有看到类似iostream.lib形式的链接库,那编译器是怎么知道iostream这个其中的实现代码呢?难道我上面列出的几个默认LIB,其中包含了实现iostream的代码?

我不是很清楚,请懂的朋友指点一下,先感谢!
...全文
218 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qweewqpkn2009 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hongwenjun 的回复:]

C/C++ code
用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 16.00.40219.01 版
版权所有(C) Microsoft Corporation。保留所有权利。

C/C++ 编译器选项


-优化-

/O1 最小化空间 ……
[/Quote]
感谢!
hongwenjun 2012-02-28
  • 打赏
  • 举报
回复
用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 16.00.40219.01 版
版权所有(C) Microsoft Corporation。保留所有权利。

C/C++ 编译器选项


-优化-

/O1 最小化空间 /O2 最大化速度
/Ob<n> 内联扩展(默认 n=0) /Od 禁用优化(默认)
/Og 启用全局优化 /Oi[-] 启用内部函数
/Os 优选代码空间 /Ot 优选代码速度
/Ox 最大化优化 /Oy[-] 启用帧指针省略

-链接-

/LD 创建 .DLL /LDd 创建 .DLL 调试库
/LN 创建 .netmodule /F<num> 设置堆栈大小
/link [链接器选项和库] /MD 与 MSVCRT.LIB 链接
/MT 与 LIBCMT.LIB 链接 /MDd 与 MSVCRTD.LIB 调试库链接
/MTd 与 LIBCMTD.LIB 调试库链接


使用动态库链接 /MD 与 MSVCRT.LIB 链接
cl /MD main.cpp
2012-02-28 19:46 8,704 main.exe

命令行cl默认使用静态库 /MT 与 LIBCMT.LIB 链接
cl /MT main.cpp
2012-02-28 19:47 99,328 main.exe
hongwenjun 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qweewqpkn 的回复:]

引用 2 楼 hongwenjun 的回复:

标准C库 使用 C RunTime msvcrt.lib
标准C++库 使用 C++ RunTime msvcprt.lib


怎么不用DLL,DLL比lib多那么多的优点!!!??WHY?
[/Quote]

VC2010 编译器 建立使用动态库的 C++ 控制台程序,是链接 msvcrt.lib 和 msvcprt.lib
运行时候时候需要 msvcr100.dll msvcp100.dll (VC2010是 VC 10.0)

VC2010 编译器 建立使用静态库的 C++ 控制台程序,是链接 libcmt.lib 和 libcpmt.lib
运行时候时候不需要 msvcr100.dll msvcp100.dll

#include <iostream>

using namespace std;

int main()
{
cout << "Hello world!" << endl;
return 0;
}


动态库的编译命令 和输出大小是 7.5KB
[ 50.0%] cl.exe /nologo /W3 /EHsc  /Ox /DNDEBUG /MD    /IC:\CodeBlocks\build\vc\include /I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include"  /c main.cpp /Foobj\Release\main.obj
[100.0%] link.exe /nologo /LIBPATH:C:\CodeBlocks\build\vc\lib /LIBPATH:"C:\Program Files\Microsoft Visual Studio 10.0\VC\lib" /out:bin\Release\vc.exe msvcrt.lib msvcprt.lib Gdi32.lib user32.lib Kernel32.lib obj\Release\main.obj
main.cpp
Output size is 7.50 KB



静态库的编译命令 和输出大小是 96.00 KB ,没有 VC10的运行时的电脑上也可以执行
[ 50.0%] cl.exe /nologo /W3 /EHsc  /Ox /DNDEBUG /MT    /IC:\CodeBlocks\build\vc\include /I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include"  /c main.cpp /Foobj\Release\main.obj
[100.0%] link.exe /nologo /LIBPATH:C:\CodeBlocks\build\vc\lib /LIBPATH:"C:\Program Files\Microsoft Visual Studio 10.0\VC\lib" /out:bin\Release\33.exe libcmt.lib libcpmt.lib Gdi32.lib user32.lib Kernel32.lib obj\Release\main.obj
main.cpp
Output size is 96.00 KB



monk_CD 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cbzjzsb123 的回复:]

标准C库 使用 C RunTime msvcrt.lib
标准C++库 使用 C++ RunTime msvcprt.lib
[/Quote]

VS2010在附加依赖项中没有看到 msvcprt.lib msvcrt.lib 这些东西呢?
??
如果是系统库的lib, 是不是编译器会自动找到这些头文件的实现!

而当LIB时我们自己提供的时候,就要在附加依赖项中显示的指明??
monk_CD 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hongwenjun 的回复:]

标准C库 使用 C RunTime msvcrt.lib
标准C++库 使用 C++ RunTime msvcprt.lib
[/Quote]

怎么不用DLL,DLL比lib多那么多的优点!!!??WHY?

cbzjzsb123 2012-02-28
  • 打赏
  • 举报
回复
标准C库 使用 C RunTime msvcrt.lib
标准C++库 使用 C++ RunTime msvcprt.lib

hongwenjun 2012-02-28
  • 打赏
  • 举报
回复
标准C库 使用 C RunTime msvcrt.lib
标准C++库 使用 C++ RunTime msvcprt.lib

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧