【问题标题】:LNK2019 : unresolved external symbol, searched for in a non-existing *.obj fileLNK2019:未解析的外部符号,在不存在的 *.obj 文件中搜索
【发布时间】: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 文件的项目。因此,错误。

标签: c++ visual-studio visual-studio-2010 visual-studio-2013 lnk2019


【解决方案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源文件的引用。

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 2014-11-07
      • 2013-06-01
      • 1970-01-01
      • 2022-01-06
      • 2014-09-19
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多