代码可在Debian 10上编译,但不能在Ubuntu 20.04

时间:2020-11-08 19:04:59

标签: c++ ubuntu g++ debian

我最近升级到Ubuntu 20.04。我意识到gr-gsmnot yet in the repository,所以我继续下载gr-gsm的源代码并自己编译。

不幸的是,Ubuntu 20.04中的gnuradio版本是too new for gr-gsm。因此,我必须首先下载gnuradio 3.7版并从源代码进行编译。成功完成之后,我继续构建gr-gsm。

不幸的是,我不断(从多个位置)收到一个错误,但关于not being able to convert from std::shared_ptr<...> to boost::shared_ptr<...>却基本相同。

/mnt/Lenovo/projects/gnuradio/gr-gsm/lib/decoding/tch_f_decoder_impl.cc: In static member function ‘static gr::gsm::tch_f_decoder::sptr gr::gsm::tch_f_decoder::make(gr::gsm::tch_mode, bool)’:
/mnt/Lenovo/projects/gnuradio/gr-gsm/lib/decoding/tch_f_decoder_impl.cc:65:9: error: could not convert ‘gnuradio::get_initial_sptr(T*) [with T = gr::gsm::tch_f_decoder_impl]()’ from ‘std::shared_ptr<gr::gsm::tch_f_decoder_impl>’ to ‘gr::gsm::tch_f_decoder::sptr’ {aka ‘boost::shared_ptr<gr::gsm::tch_f_decoder>’}
   64 |       return gnuradio::get_initial_sptr
      |              ~~~~~~~~~~~~~~~~~~~~~~~~~~
   65 |         (new tch_f_decoder_impl(mode, boundary_check));
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |         |
      |         std::shared_ptr<gr::gsm::tch_f_decoder_impl>

从这里:

...
    control_channels_decoder::make()
    {
      return gnuradio::get_initial_sptr
        (new control_channels_decoder_impl());
    }
...

所以我想,到此为止。无法在Ubuntu 20.04上构建gr-gsm,因为编译器版本较新,并且可能需要更新gr-gsm的“旧”代码才能实现。没有在弹出错误的每个位置进行类似this SO Answer的操作,我不得不等待开发人员更新gr-gsm。

但是,我在Debian 10上重复了相同的步骤,即

  1. 从源代码“ gnuradio 3.7”下载并进行了编译。
  2. 从源代码下载gr-gsm并开始对其进行编译。

出乎意料的是,它编译良好。

Debian 10上的GCC版本是8.3。 Ubuntu 20.04的GCC版本是9.3。

我认为这是两个GCC版本中使用不同的C ++标准的最大问题。因此,我将-std=c++11-std=c++14-std=c++17传递给CMAKE_CXX_FLAG到Debian 10构建中,试图对其进行破解。什么都没改变,它成功构建了。

另一方面,无论我将-std=c++11-std=c++14还是-std=c++17传递给CMAKE_CXX_FLAG到Ubuntu 20.04版本,都没有改变;仍然弹出相同的错误。

那么GCC8.3和GCC9.3之间到底有什么不同,它们允许从前一个成功地构建相同的代码,而从后一个成功地构建相同的代码呢?甚至在考虑到Ubuntu是Debian的衍生发行版时更是如此。

0 个答案:

没有答案