EasyDSS 编译 Arm 版本出现 “undefined: syscall.Dup2”解决方式

由于很多用户的系统和程序都不同,因此TSINGSEE青犀视频研发团队往往需要根据用户的实际需求来对产品进行定制或者修改。有的客户需要 Arm 版本的 EasyDSS平台使用,因此我们也会在aarch64环境下编译EasyDSS。在编译过程中,出现报错 “undefined: syscall.Dup2”。

在 Arm 架构中,没有提供 Dup2 的方法,因此出现以上编译问题。

Dup3与Dup2参数略有差异,dup(int filedes)函数返回一个可用的与filedes共享文件表项的最小描述符。而dup2(int filedes,int filedes2)是使用一个描述符filedes2去指向filedes2文件表项(也是共享),但是在调用dup2之前要确保filedes2为可用描述符。

在该问题中,我们查询在 Arm 架构的 linux 中实现了 Dup3 方法代替 Dup2,因此修改代码为 Dup3,即可解决该问题。参考代码如下:


func RedirectStderr() (err error) {
   logFile, err := os.OpenFile(ErrorLogFilename(), os.O_WRONLY|os.O_CREATE|os.O_SYNC|os.O_APPEND, 0644)
   if err != nil {
      return
   }
   err = syscall.Dup3(int(logFile.Fd()), int(os.Stderr.Fd()), 0)
   if err != nil {
      return
   }
   return
}

EasyDSS具有电视直播、现场直播、时移电视、即刻回看和视频点播功能,适合OTT TV、IPTV、互联网教育、视频聊天、现场直播和VOD等应用。并且EasyDSS支持多种特性,完全能够满足企业视频信息化建设方面的需求,欢迎大家了解测试。

原文地址:https://www.cnblogs.com/easydss/p/15330551.html