基于wince6.0的流媒体播放《一》

要实现流媒体播放,第一步先熟悉jrtplib

相对来说window下的编程资料多一点,所以从流媒体服务器程序开始,一点点熟悉jrtplib。

 

首先新建一个MFC 对话框程序,添加jrtplib.lib,在目录中添加rtplib的源码目录,编译有一堆错误

1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _strncpy_s 已经在 libcmtd.lib(strncpy_s.obj) 中定义
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: __invalid_parameter 已经在 libcmtd.lib(invarg.obj) 中定义
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: __CrtDbgReportW 已经在 libcmtd.lib(dbgrptw.obj) 中定义
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" (
??1exception@std@@UAE@XZ) 已经在 libcmtd.lib(stdexcpt.obj) 中定义
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: "public: __thiscall std::exception::exception(void)" (
??0exception@std@@QAE@XZ) 已经在 libcmtd.lib(stdexcpt.obj) 中定义

。。。。

1>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

问题出在默认库的引用选择上。

VS2008,项目——属性——配置属性——C/C++——代码生成:他有/MT,/MTd,/Md,/MDd四个选项,你必须让所有使用的库都使用相同的配置,否则就会有相应的提示,甚至可能会出现无法解析的函数。有时我们使用的库不是自己可以控制的,那么就只能把工程属性设置成河你使用的库相同的选项。

如果有一堆的重定义错误发生在同一个lib中,而且跟它冲突的也是同一个lib,那么这个两个lib的功能应该是一样的,可以2选一,只要在“忽略特定的库”内填入需要忽略的库。

项目属性-配置属性-链接器-输入-忽略特定的库:libcmtd.lib

修改后保存,编译,OK通过了~

 

接下来声明成员变量

RTPSession m_rtpSession;

再编译,出现大量如下连接错误:

rtplib.lib(rtpsession.obj) : error LNK2019: 无法解析的外部符号 "public: __thiscall JMutex::~JMutex(void)" (??1JMutex@@QAE@XZ),该符号在函数 __unwindfunclet$??0RTPSession@@QAE@PAVRTPMemoryManager@@@Z$0 中被引用

 

搜索资料发现,jrtplib基于jthread.lib,将相应文件添加到工程

链接错误数减少到18个,继续看剩下的错误:

1>jrtplib.lib(rtcpcompoundpacketbuilder.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall std::_Container_base::~_Container_base(void)" (__imp_??1_Container_base@std@@QAE@XZ)
1>jrtplib.lib(rtcpcompoundpacket.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall std::_Container_base::~_Container_base(void)" (__imp_??1_Container_base@std@@QAE@XZ)
1>jrtplib.lib(rtpsourcedata.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall std::_Container_base::~_Container_base(void)" (__imp_??1_Container_base@std@@QAE@XZ)

 

。。。

百度下,用的那个库是用vs2005编译的,而电脑是vs2008,两者的C++库不一致。
要么装2005,如果有那个库的源码,在vs2008下重编译即可。

没办法,重新编译lib吧

 

重新编译lib,又出现了新的问题,搜索下

发现是因为忽略了libcmtd.lib导致的,但是不忽略libcmtd.lib又会有冲突,

怎么办呢?

这时候这篇文章指点了迷津:

http://hi.baidu.com/%C7%D8%B7%E7%CF%FE%D4%C2%C3%F7/blog/item/59aeb5da2d8377046227986b.html

重新编译lib,将lib的运行时库选择/Mtd。

再次编译程序,OK可以跑了~

 

 

你可能感兴趣的:(编程,exception,mfc,library,WinCE,流媒体服务器)