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

时间:2015-09-16 09:47:51

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

早上好,
我刚刚从一位已经离开的同事那里继承了一个应用程序,我已经遇到了麻烦:我们做的最后一件事就是将解决方案从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 \ usharedmemory.obj”(在项目目录中)引起的,但是在快速查看之后,似乎这个* .obj文件甚至没有存在。
因此,下一个问题是:为了确保创建* .obj文件,我该怎么办?我已经验证了“usharedmemory.cpp”文件存在于主项目的目录中(相应的* .h文件位于“外部依赖关系”一章中,这使我相信* .obj文件将是在主项目建设期间创建 你看到我的问题了:我的项目是指项目需要创建的文件,但由于项目没有创建文件,他显然无法引用它,你看到我正在运行的圆圈: - )< BR />

(为了您的信息,我不知道如何生成“* .obj”文件)

有人可以帮帮我吗? 感谢

2 个答案:

答案 0 :(得分:1)

对象文件( List<String> testFilesList = new ArrayList<String>(); testFilesList.add("./testng.xml"); //test suite resides in the working directory's root folder **testng.setTestSuites(testFilesList);** //you can addd multiple suites either here by adding multiple files or include all suites needed in the testng.xml file testng.setUseDefaultListeners(false); testng.addListener(htmlRep); testng.run(); )是编译时编译器直接从源文件(*.obj)为项目中的每个源文件创建的。

由于 usharedmemory.obj 不存在,您收到的错误;它应该在 Debug Release 文件夹中创建。

您得到的错误是因为 usharedmemory.cpp 使用*.cpp - C_NamedSemaphore(char const *,unsigned int)的构造函数,并且在任何源代码中都找不到构造函数的定义文件。此构造函数用于 usharedmemory.cpp 中定义的C_NamedSemaphore - 构造函数。这是错误消息的内容。

要解决此问题,您需要找出C_RecursiveNamedSemaphore(char const *,unsigned int)的构造函数的定义位置(哪个源文件),并确保该源文件包含在项目中。或者,如果它位于库文件(静态或动态)中,请验证此库文件是否包含在附加依赖项中(在C_NamedSemaphore下;确保为所有设置此项构建,而不仅仅是当前活动的构建。)

答案 1 :(得分:0)

早上好,
我终于解决了我的问题。作为一个好公民,我将描述我是如何做到的:-),但作为一个不太优秀的程序员,我需要承认我不明白我的行为如何解决问题;-(
我已经对* .vcxproj Visual Project文件(VC2010中的旧文件和新的VC2013文件)进行了文件比较。通过这种方式,我看到了&#34; umultiproc.cpp&#34; VC2013中缺少一个条目:
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
<ItemGroup>
...
<ClCompile Include="..\..\mp\umultiproc.cpp" /> <!-- missing -->

摘要:在错误消息中,有一个未解析的符号(C_Semaphore构造函数),它在* .cpp / * .h source / header文件中定义。为了解决这个错误,我在* .cpp源文件中添加了对VC2013项目文件的引用。