Live555 和 Visual Studio 2010

Live555 and Visual Studio 2010

我想在 Visual Studio 2010 年编译 Live555 测试程序,但我无法这样做。

我编译库没有任何问题

BasicUsageEnvironment.lib
groupsock.lib
liveMedia.lib
UsageEnvironment.lib

但是说到测试程序,我就是一无所获。这是我在 mediaServer.

中编译文件时的编译器消息

有没有人遇到过这个问题?

error LNK2001: unresolved external symbol "void __cdecl operator delete(void *)" (??3@YAXPAX@Z)
error LNK2001: unresolved external symbol "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)
error LNK2001: unresolved external symbol ___security_cookie
error LNK2001: unresolved external symbol ___CxxFrameHandler3
error LNK2001: unresolved external symbol @__security_check_cookie@4
error LNK2001: unresolved external symbol __RTC_CheckEsp
error LNK2001: unresolved external symbol __RTC_Shutdown
error LNK2001: unresolved external symbol __RTC_Shutdown
error LNK2001: unresolved external symbol __RTC_InitBase
error LNK2001: unresolved external symbol "const type_info::`vftable'" (??_7type_info@@6B@)
error LNK2001: unresolved external symbol "public: virtual bool __thiscall Medium::isSource(void)const " (?isSource@Medium@@UBE_NXZ)
<more errors>

在此处完成转储:http://pastebin.com/4bVQAcdp


更新

我之前未能构建项目,因为我在为所有库创建项目时取消选中 "Precompiled header" 选项。将库链接到我的 mediaServer 项目时,VS 无法解析所有函数。

我能够通过选中 "Precompiled header" 选项重建它们并将 #include "stdafx.h" 添加到每个 *.cpp 文件来使其工作。

事后思考:我有一种感觉,我只需要为 mediaServer 项目打开 "Precompiled header" 选项。如果您尝试并成功了,请告诉我。 ;-)


更新 2

没有。我必须为每个静态库项目打开预编译头。并将 #include "stdafx.h" 添加到 ~200 *.cpp 文件。是的。

更新
我查看了您的完整转储:

1>UsageEnvironment.lib(HashTable.obj) : error LNK2001: unresolved external symbol "void __cdecl operator delete(void *)" (??3@YAXPAX@Z)

基于第一个错误,您为 UsageEnviroment Lib 编译的任何源代码都引用了删除运算符函数。我的猜测是要么你没有正确的源代码,要么你改变了它。可以粘贴UsageEnvironment.hh文件内容吗?


我刚好正在构建这个,我今天早上才开始工作,根据你的要求,我编译了测试程序 "mediaServer"。我们在这里基于一些假设进行操作,我们假设您正确构建了静态库。

假设静态库是正确的,这就是您正在寻找的解决方案:

包括:

c:\Live555\BasicUsageEnvironment\include
c:\Live555\liveMedia\include
c:\Live555\UsageEnvironment\include;
c:\Live555\groupsock\include
$(IncludePath)

库路径:

"*Insert path to your lib files here*";
$(LibraryPath)

链接器输入:

Ws2_32.lib 
groupsock.lib
BasicUsageEnvironment.lib
liveMedia.lib
UsageEnvironment.lib
libBasicUsageEnvironment.lib
libgroupsock.lib

您的解决方案文件夹应如下所示: 确保存在粗体文件。

您的源文件夹应包含以下文件:

媒体服务器:

**DynamicRTSPServer.cpp**
**DynamicRTSPServer.hh**
**live555MediaServer.cpp**
mediaServer.vcxproj
mediaServer.vcxproj.filters
ReadMe.txt
**rtcp_from_spec.c**
**rtcp_from_spec.h**
stdafx.cpp
stdafx.h
targetver.h
**version.hh**

根据您的错误,您的项目中似乎包含了不正确的源文件,那些未解析的引用不会出现在 live555 项目 tar 文件中的任何位置。 http://live555.com/liveMedia/public/live555-latest.tar.gz

如果此解决方案不起作用,请提供以下选项卡的项目设置屏幕截图: 包括目录 链接器输入 项目文件夹的文件列表。

让我知道这是否有帮助,如果这不起作用,我们将不得不研究您的静态库是如何构建的。我们需要查看在您的代码中的哪些位置进行了这些外部引用,以及需要排除进行这些引用的原因,因为它们没有出现在下面 link 中引用的 live555 存档中。