Visual c++ 未指定库,但printf链接到C++;节目?
我有以下代码:Visual c++ 未指定库,但printf链接到C++;节目?,visual-c++,runtime,stdio,Visual C++,Runtime,Stdio,我有以下代码: #include <stdio.h> int main() { printf ("hello world\n"); return 0; } 这将生成simple.exe(编译器自动调用链接器),可执行文件将按预期显示“hello world”消息。当我查看可执行文件w/depends.exe时,它显示kernel32.dll是唯一的依赖项。当我转储kernel32.dll库的内容时,没有显示printf VC++是否采用了某种优
#include <stdio.h>
int main()
{
printf ("hello world\n");
return 0;
}
这将生成simple.exe(编译器自动调用链接器),可执行文件将按预期显示“hello world”消息。当我查看可执行文件w/depends.exe时,它显示kernel32.dll是唯一的依赖项。当我转储kernel32.dll库的内容时,没有显示printf
VC++是否采用了某种优化方法,使得printf以某种方式直接包含在最终的可执行文件中?如果是这样的话,它是如何被记录的?printf(实际上是fprintf到stdout)以及其他“标准”函数malloc、exit等都是与libc.lib静态链接的,这就是为什么您在任何地方都不会将其视为dll。printf(实际上是fprintf到stdout)以及其他“标准”函数malloc,exit等与libc.lib静态链接,这就是为什么在任何地方都不会将其视为dll。
libc.lib
不再使用
VC++10上静态或动态包含C运行时库(CRT)的选项都有文档记录。您可以在项目选项中选择所需/所需的选项。
libc.lib
不再使用
VC++10上静态或动态包含C运行时库(CRT)的选项都有文档记录。您可以在“项目选项”中选择所需的库。MS VC将“默认”库的名称嵌入到大多数对象文件中。除非您使用链接器的
-nodefaultlib
选项另外指定,否则将链接该库(或那些库)。如果您单独使用它,它不会链接任何默认库。或者,您可以指定一个特定的库,例如-nodefaultlib:mylib.lib
,在这种情况下,它链接除您在此处指定的库之外的所有默认库
若要使用您的示例,请使用:
cl simple.c
它将正确编译和链接。但是,如果您使用:
cl simple.c -link -nodefaultlib
您将获得:
simple.obj:错误LNK2019:函数main中引用的未解析外部符号printf链接:错误LNK2001:未解析的外部符号mainCRTStartup
simple.exe:致命错误LNK1120:2个未解析的外部
完整地说,您还可以使用编译器的
/Zl
开关创建对象,而不嵌入任何库的名称。这主要用于创建静态库,因此它们不会嵌入可能与使用库的生成代码冲突的库的名称。MS VC将“默认”库的名称嵌入到大多数对象文件中。除非您使用链接器的-nodefaultlib
选项另外指定,否则将链接该库(或那些库)。如果您单独使用它,它不会链接任何默认库。或者,您可以指定一个特定的库,例如-nodefaultlib:mylib.lib
,在这种情况下,它链接除您在此处指定的库之外的所有默认库
若要使用您的示例,请使用:
cl simple.c
它将正确编译和链接。但是,如果您使用:
cl simple.c -link -nodefaultlib
您将获得:
simple.obj:错误LNK2019:函数main中引用的未解析外部符号printf链接:错误LNK2001:未解析的外部符号mainCRTStartup
simple.exe:致命错误LNK1120:2个未解析的外部
完整地说,您还可以使用编译器的
/Zl
开关创建对象,而不嵌入任何库的名称。这主要是为了创建静态库,因此它们不会嵌入可能与使用库的构建代码冲突的库名称。正如Steve在下面所说的,libc不再可用,现在使用的是多线程版本的libcmt,但是想法是一样的-它是静态构建的,不使用DLLSE正如Steve在下面所说的,libc不再可用,现在使用的是多线程版本的libcmt,但是想法是一样的-它是静态构建的,不使用DLLShank you作为URL,我无法在MSDN迷宫中自己找到它。谢谢你的URL,无法在MSDN迷宫中单独找到它。我尝试了-nodefaultlib,得到了与您显示的完全相同的输出。谢谢。我尝试了-nodefaultlib,得到了与您显示的完全相同的输出。非常感谢。