Visual studio 2010 如何在Visual Studio中生成对象(.obj)文件

Visual studio 2010 如何在Visual Studio中生成对象(.obj)文件,visual-studio-2010,visual-c++,Visual Studio 2010,Visual C++,我是visual studio win32/VC++应用程序开发新手。我只想知道.obj文件是如何生成的,以及我们如何解决.obj文件中未解析的外部符号。对象文件包含从源代码生成的可重定位机器代码。Visual Studio为每个.cpp文件创建一个.obj文件。然后根据项目(可执行、静态/动态库),您可以获得可重定位或不可重定位的代码。如果代码是可重定位的,则在编译时不可用的符号(函数调用、变量)将标记为未解析。当链接执行重定位的对象(例如可执行文件)时,如果其他输入未提供未解析的符号,则会出

我是visual studio win32/VC++应用程序开发新手。我只想知道.obj文件是如何生成的,以及我们如何解决.obj文件中未解析的外部符号。

对象文件包含从源代码生成的可重定位机器代码。Visual Studio为每个
.cpp
文件创建一个
.obj
文件。然后根据项目(可执行、静态/动态库),您可以获得可重定位或不可重定位的代码。如果代码是可重定位的,则在编译时不可用的符号(函数调用、变量)将标记为未解析。当链接执行重定位的对象(例如可执行文件)时,如果其他输入未提供未解析的符号,则会出现未解析的引用错误。要解决这些问题,您必须在包含它们的对象文件中提供输入(例如,当您的应用程序具有某些全局函数时,项目中使用的其他库依赖于这些函数),或者在包含外部库的头时针对外部库进行链接

未解决的符号问题通常发生在包含来自特定于操作系统的API或第三方库的头文件并且不知道链接所针对的内容时。经验法则是,如果使用第三方库,请将它们指定为附加链接器输入;如果使用操作系统API,请查找文档以查看应链接的内容(例如,MSDN始终说明每个函数所需的库)。当然,您可能会使用由其他人构建的库,该库本身确实有一些依赖项,然后您甚至可以在不明确引入任何外部头或库的情况下讨论这些问题。在这种情况下,找到关于库是如何构建的以及依赖项在哪里的信息也是明智的——然后您可以找到并提供预构建的二进制文件,或者在最坏的情况下自己构建依赖项并将其作为链接器输入提供


我已经写了一个关于处理可能相关的未解决符号的答案。

谢谢。很好的解释。但我要公开:虚拟结构QMetaObject const*\uu thiscall UpdateDialog::metaObject(void)const作为未解析的外部符号我不知道,哪个库/头是这个外部符号的源。@Hagesumne好吧,这表明代码中有一些QT内容,你是在链接QT库吗?我怎么知道我是不是在链接QT库?@Hagesumne你的链接器输入中有QtCore4.lib(这是一个例子,我想QT 5会有其他名称)吗?是的。我的链接器输入中有QtCore4.lib。