LNK2019:未解析的外部符号,在不存在的 *.obj 文件中搜索

Posted

技术标签:

【中文标题】LNK2019:未解析的外部符号,在不存在的 *.obj 文件中搜索【英文标题】:LNK2019 : unresolved external symbol, searched for in a non-existing *.obj file 【发布时间】:2015-09-16 09:47:50 【问题描述】:

早上好, 我刚刚从一位离职的同事那里继承了一个应用程序,我已经遇到了麻烦:我们做的最后一件事是将解决方案从 Visual Studio 2010 移植到 2013。 现在,在构建解决方案中的一个项目时,我收到以下错误消息:1>usharedmemory.obj : error LNK2019: unresolved external symbol "public: __cdecl C_NamedSemaphore::C_NamedSemaphore(char const *,unsigned int)" (??0C_NamedSemaphore@@QEAA@PEBDI@Z) referenced in function "public: __cdecl C_RecursiveNamedSemaphore::C_RecursiveNamedSemaphore(char const *,unsigned int)" (??0C_RecursiveNamedSemaphore@@QEAA@PEBDI@Z) 这个错误似乎是由文件“Y:\Ucam5\ucm\x\rip_mlfdpf\ussharedmemory.obj”(在项目目录中)引起的,但快速查看后,似乎这个*.obj文件甚至没有存在。 因此下一个问题是:我可以做些什么来确保 *.obj 文件被创建?我已经验证了“ussharedmemory.cpp”文件存在于主项目的目录中(对应的*.h文件位于“外部依赖”一章,这让我相信*.obj文件将是在主项目的构建过程中创建。 你看我的问题:我的项目引用了项目需要创建的文件,但是由于项目没有创建文件,他显然不能引用它,你看我运行的圈子:-)

(仅供参考,我不知道如何生成“*.obj”文件)

谁能帮帮我? 谢谢

【问题讨论】:

可能是项目依赖排序错误。正在寻找.obj 文件的项目正在构建之前 将生成.obj 文件的项目。因此,错误。 【参考方案1】:

目标文件 (*.obj) 是编译器在编译时直接从源文件 (*.cpp) 为项目中的每个源文件创建的。

您收到的错误不是ussharedmemory.obj 不存在引起的;它应该在 DebugRelease 文件夹中创建。

你得到的错误是因为 ussharedmemory.cpp 使用了C_NamedSemaphoreC_NamedSemaphore(char const *,unsigned int)-constructor 并且在任何源文件中都找不到构造函数的定义。此构造函数用于 ussharedmemory.cpp 中定义的 C_RecursiveNamedSemaphore(char const *,unsigned int)-constructor。这就是错误消息的内容。

要解决这个问题,你需要找出C_NamedSemaphore的构造函数定义在哪里(哪个源文件),并确保这个源文件包含在你的项目中。或者,如果它位于库文件(静态或动态)中,请验证该库文件是否包含为 附加依赖项(在 project Properties -> Linker -> Input -> Additional Dependencies 下;确保为 all 构建,而不仅仅是当前活跃的构建)。

【讨论】:

【参考方案2】:

早上好, 我终于解决了我的问题。作为一个好公民,我会描述我是如何做到的 :-),但作为一个不太好的程序员,我需要承认我不明白我的行为是如何解决问题的 ;-( 我对两个 *.vcxproj Visual Project 文件(VC2010 的旧文件和 VC2013 的新文件)进行了文件比较。这样,我看到 VC2013 中缺少“umultiproc.cpp”条目:<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">...<ItemGroup>...@987654325 @

总结:在错误消息中,有一个未解析的符号(C_Semaphore 构造函数),它在 *.cpp/*.h 源/头文件中定义。为了解决错误,我在VC2013工程文件中添加了对*.cpp源文件的引用。

【讨论】:

以上是关于LNK2019:未解析的外部符号,在不存在的 *.obj 文件中搜索的主要内容,如果未能解决你的问题,请参考以下文章

vc ++ MFC应用程序,错误LNK2019:未解析的外部符号

错误 LNK2019:未解析的外部符号 opencv

错误 LNK2019:未解析的外部符号

C++ LNK1120 和 LNK2019 错误:“未解析的外部符号 WinMain@16”

opencv/visual studio:错误 LNK2019:未解析的外部符号

LNK2019“未解析的外部符号”错误(C++ OpenGL)