2016年2月11日木曜日

Debian(Raspbian)におけるコンパイルエラーの回避

Back


少し落ち着いた感のある Jessie ですが、まだまだすんなりとは行かないところもあるようです。今回 ircDDBGateway の動いている HummingBoard(Raspberry Pi とレイアウトが全く同じ別物)に Jessie をインストールしたのを切っ掛けに Raspberry Pi にもテストインストールしてみました。

Raspbian(Jessie)のインストールに関しては「Raspbian(Jessie)のインストール for HAM」をご参照ください。

Western D-Star のセットアップ済みイメージをダウンロードすれば、こんな苦労は不要です。ただ、容量を少なくしたり、スイッチでオン・オフするため出来るだけ壊れにくくするためにはこの方法が必要です。

ircDDBGatewayとDStarRepeaterのインストール準備

  1. Wheezyの最終版の辺りから、ライブラリのバージョンが 2.8 から 3.0 に上がっていますので注意

  2. $ sudo apt-get -y install wx3.0-headers wx-common libwxgtk3.0-0 libwxgtk3.0-dev libwxbase3.0-0 libwxbase3.0-dev portaudio19-dev libportaudio2 build-essential libusb-dev libusb-1.0-0 libusb-1.0-0-dev
    


    更に、2017.08.17以降の Rapbian 9 (Stretch)では、次のようにしてください。
    $ sudo apt-get -y install wx3.0-headers wx-common libwxgtk3.0-0v5 libwxgtk3.0-dev libusb-dev libusb-1.0-0-dev libasound2-dev
    


    更に、2020.02.13以降の Rapbian 10 (Buster)では、次のようにしてください。
    $ sudo apt -y install wx3.0-headers wx-common libwxgtk3.0-0v5 libwxgtk3.0-dev libwxbase3.0-0v5 libwxbase3.0-dev portaudio19-dev libportaudio2 build-essential libusb-dev libusb-1.0-0 libusb-1.0-0-dev
    


  3. 同様に gcc C/C++コンパイラのバージョンも 4.9 にアップしています。

G4KLXソフトウェアのコンパイル時にエラーが発生(回避方法)

 ここでの、回避方法は私の知る範囲での試行錯誤なのでプログラム的に壊してしまっているか、または的を射ているか全く確認しておりません。Jonathan にも問い合わせておりません。ただ、結果問題なくソフトウェアは稼働し、交信できています。

●ircDDBGateway における修正箇所

  1. RepeaterDataSet.cpp の修正

  2. ZIPファイルを解凍したフォルダ(フォルダircDDBGatewayとDStarRepeaterが見える位置)での作業を示します。

    $ sudo nano ircDDBGateway/GUICommon/RepeaterDataSet.cpp
    
      GNU nano 2.2.6          File: ircDDBGateway/GUICommonRepeaterDataSet.cpp
    wxString CRepeaterDataSet::getReflector() const
    {
            if (isDDMode())
                    return wxEmptyString;
    
            int n = m_reflector->GetCurrentSelection();
            int c = m_channel->GetCurrentSelection();
    
            if (n == 0)
                    return wxEmptyString;
    
            wxString reflector = m_reflector->GetStringSelection();
    
            reflector.Append(wxT("        "));
            reflector.Truncate(LONG_CALLSIGN_LENGTH - 1U);
            reflector.Append(wxT("A") + c);
    
            return reflector;
    }
    
    オリジナル 484行目 'A'"A" に変更します。[Ctrl]+[o]→[Enter]→[Ctrl]+[x]で保存・終了

  3. IRCDDBApp.cpp の修正

  4. $ sudo nano ircDDBGateway/ircDDB/IRCDDBApp.cpp
    
      GNU nano 2.2.6                File: ircDDBGateway/ircDDB/IRCDDBApp.cpp
           if (dt.ParseFormat(tk + wxT(" ") + timeToken, wxT("%Y-%m-%d %H:%M:%S")) == "")
    
    オリジナル 867行目 NULL""(空白文字)に置き換えます。(ダブルクォーテイション2つ、スペース無し)

●DStarRepeater における修正箇所

  1. MMDVMController.cpp の修正

  2. ZIPファイルを解凍したフォルダ(フォルダircDDBGatewayとDStarRepeaterが見える位置)での作業を示します。

    $ sudo nano DStarRepeater/Common/MMDVMController.cpp
    
      GNU nano 2.2.6                File: DStarRepeater/Common/MMDVMController.cpp
    CMMDVMController::CMMDVMController(const wxString& port, const wxString& path, 
    bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int 
    rxLevel, unsigned int txLevel) :                         
    CModem(),
    m_port(port),
    m_path(path),
    m_rxInvert(rxInvert),
    m_txInvert(txInvert),
    m_pttInvert(pttInvert),
    m_txDelay(txDelay),
    m_rxLevel(rxLevel),
    m_txLevel(txLevel),
    m_serial(port, SERIAL_115200, true),
    m_buffer(NULL),
    m_txData(1000U),
    
    
    MMDVMController.hの中の変数定義と、上記青色の変数の順がrx, txなので赤色の部分も同順にする(オリジナルは tx, rxの順)

  3. SoundCardReaderWriter.cpp の修正

  4. $ sudo nano DStarRepeater/Common/SoundCardReaderWriter.cpp
    
      GNU nano 2.2.6                File: DStarRepeater/Common/SoundCardReaderWriter.cpp
            unsigned int offset = 0U;
            int tmp_offset = 0U;    // for "warning: comparison between signed and unsigned integer expressions"
            int tmp_nSamples = nSamples;
            snd_pcm_sframes_t ret;
    
    /* この行を次行と置き換えるためコメントアウト
            while ((ret = ::snd_pcm_writei(m_handle, m_samples + offset, nSamples - offset)) != (nSamples - offset)) { 
    */
            while ((ret = ::snd_pcm_writei(m_handle, m_samples + offset, nSamples - offset)) != (tmp_nSamples - tmp_offset)) {
    
    オリジナル 753行目 int(singed) と unsigned int の比較(!=)は出来ないという警告なので、赤色行ですべてを singed int にキャスト(tmp_ の変数)して通しました。

  5. DStarRepeaterApp.cpp の修正

  6. $ sudo nano DStarRepeater/DStarRepeater/DStarRepeaterApp.cpp
    
      GNU nano 2.2.6                File: DStarRepeater/Common/SoundCardReaderWriter.cpp
            for (unsigned int i = 0U; i < transmitterNames.GetCount(); i++) {
                wxString name = transmitterNames.Item(i);
                if (!name.IsEmpty()) {
                    wxLogInfo(wxT("\tTX %u name: %s"), i + 1U, name.c_str());
                } 
            }
            for (unsigned int i = 0U; i < receiverNames.GetCount(); i++) {
                wxString name = receiverNames.Item(i);
                if (!name.IsEmpty())  {
                    wxLogInfo(wxT("\tRX %u name: %s"), i + 1U, name.c_str());
                }  
            }
    
    オリジナル 490 及び 495行目の if文に大括弧 { } を入れて構文を整えます。(オリジナルの構文はCや以前のC++コンパイラではOKでした。)

  7. DStarRepeaterD.cpp の修正

  8. $ sudo nano DStarRepeater/DStarRepeater/DStarRepeaterD.cpp
    
    上記のDStarRepeaterApp.cpp と全く同じで、オリジナルの 421, 426行目の if文に大括弧 { } を入れて構文を整えます。


 少し手間ですがこれらの修正を加えた後、ircDDBGateway 及び DStarRepeater 各フォルダ内で sudo make すればエラーが発生すること無くコンパイルが終了します。 その後さらに各フォルダ内で sudo make install すれば完了です。

Back


73
J E 3 H C Z @REF047 C


0 件のコメント:

コメントを投稿