zoukankan      html  css  js  c++  java
  • VS2010下编译安装DarwinStreamingServer5.5.5

    源码下载链接:http://dss.macosforge.org/
    源码版本: 5.5.5版本
    电脑环境:visual studio2010,window 7 x64系统。
    用VS2010打开WinNTSupport文件夹下的.dsw工程,全部转换vs2010。
     
    使用vs2010编译的遇到一些问题和解决方法:
    (1)          提示:winsock2某些函数重定义。
    方法:DarwinStreamingSrvr6.0.3-SourceCommonUtilitiesLibOSHeaders.h(209)的#include<windows.h> 前面加上:
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
     
    (2)          提示:error C2039: 'timeGetTime' : is not a member of '`global namespace''
     方法:包含头文件Mmsystem.h,并在工程设置中引入该Winmm.lib库就OK了。
    注意:加在其他头文件前面,并且形式如下,三行都要加上:
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <Mmsystem.h>
     
    (3)          提示:error C1083: 无法打开包括文件:“grp.h”: No such file or directory
    方法:将#include <grp.h>
    #include <membership.h>
    #include <pwd.h>
    #include <unistd.h>
    这个几个都注释掉,然后就会发现有两个函数会出错,好,那就暂时将这两个函数注释掉先。后来我编译中查找了下,好像貌似在编译过程中,所有项目中,没有那个调用了这两个函数。所有注释就没关系了。
     
    (4)          无法打开包括文件:“arpa/inet.h”: No such file or directory
    方法:注释掉就可以了或者用下面的语句来代替
    #defineWIN32_LEAN_AND_MEAN
    #include<windows.h>
    #pragmacomment(lib, "wsock32.lib")
    参考资料:
    ?url=0ZJZZTYyfhUIpS1Vd-jMZHP6gbMRwyG5iYlUzAH_uHQTemUtopRbKK_-FfAA0O2knaP7sgs8bfkzofTB5KldAK
    (5)          error C2039: “strlcpy”: 不是“`globalnamespace'”的成员
    方法:strlcpy不是windows的函数,将strlcpy该为对应的函数strncpy
    参考资料:
    (6)          error C3861: “SetTempPath”: 找不到标识符
    方法:搜索下SetTempPath,其实这个函数是有的,只是被注释掉了,哎.....去掉注释就可以了。
    (7)          error PRJ0002 : 错误的结果 2 (从“C:ProgramFiles (x86)Microsoft Visual Studio 9.0VCincl.exe”返回)
    方法:在d:/ProgramFiles/Microsoft Visual Studio 9.0/VC/bin直接点击cl.exe,然后发现少了哪个库,直接下载就好了。
    一般是缺少mspdb80.dll ,所以不用下载。在Common7IDE中能找到。mspdbsrv.exe 或 mspdbcore.dll 丢失或者其版本和 mspdb80.dll 的版本不同,确定这三个文件的相同版本安装在系统里。
    在VC安装目录下的Common7IDE 目录下拷贝这三个文件到安装目录下的VCin下即可
    参考资料:
    (8)          cl: 命令行 errorD8004 :“/I”需要参数
    解决方法:在工程属性->C/C++选项->附加命令中有/I ,应该是指这个没有参数.工程是从VC6的工程转过来的,直接去掉就可以编译。
    (9)          xxx头文件找不到
    解决方法:头文件目录中添加该目录的包含就ok了。
    (10)      最后就是无法解析的外部符号,这个就好办了,找到该函数在那个cpp里面,或者是哪个项目的lib中,添加进来编译就行了。
    (11)      error C3861: “snprintf”: 找不到标识符
    方法:snprintf也不是windows的函数,将snprintf改为对用的_snprintf就可以了
    (12)      RTPStream::UDPMonitorWrite函数出错:
    方法:将那几个出错的类型,改为对应的类型就好了。
    修改RTPStream::UDPMonitorWrite方法为:
    void RTPStream::UDPMonitorWrite(void*thePacketData, UInt32 inLen,  Bool16isRTCP)
    {
       if (FALSE == fUDPMonitorEnabled || 0 == fMonitorSocket || NULL ==thePacketData)
           return;
           
       if ((0 != fPlayerToMonitorAddr) && (this->fRemoteAddr !=fPlayerToMonitorAddr))
           return;
           
      UInt16 RTCPportOffset = (TRUE == isRTCP)? 1 : 0;
     
     
       struct sockaddr_in sin;
       memset(&sin, 0, sizeof(struct sockaddr_in));
       sin.sin_family = AF_INET;
       sin.sin_addr.s_addr = htonl(fMonitorAddr);
       
       if (fPayloadType == qtssVideoPayloadType)
           sin.sin_port = (USHORT) htons(fMonitorVideoDestPort+RTCPportOffset);
       else if (fPayloadType == qtssAudioPayloadType)
           sin.sin_port = (USHORT) htons(fMonitorAudioDestPort+RTCPportOffset);
       
       if (sin.sin_port != 0)
        {
           int result = ::sendto(fMonitorSocket,(char*) thePacketData, inLen, 0,(struct sockaddr *)&sin, sizeof(struct sockaddr));
          if (DEBUG)
           {   if (result < 0)
                    qtss_printf("RTCP MonitorSocket sendto failed ");
               else if (0)
    qtss_printf("RTCP MonitorSocket sendto port=%hu, packetLen=%"_U32BITARG_" ",ntohs(sin.sin_port), inLen);
           }
        }
    }

  • 相关阅读:
    AsEnumerable和AsQueryable的区别
    LinQ高级查询、组合查询、IQueryable集合类型
    减少该死的 if else 嵌套
    Linux中tomcat随服务器自启动的设置方法
    Linux虚拟机与主机网络连接配置与文件传输
    Linux + NodeJS 常用命令
    本地项目的npm安装方法
    npm 报错 : npm ERR! Maximum call stack size exceeded
    npm WARN checkPermissions Missing write access to ......解决方法
    webpack 安装使用简例
  • 原文地址:https://www.cnblogs.com/lidabo/p/3860006.html
Copyright © 2011-2022 走看看