raytency’s diary

画像とテーブルはそのうち上げます

Win版(インストーラー版)GNU Radioで、gr_modtoolを動かすためにやったこと

※※Pythonでブロックを作るには、自作ブロックとは別に「Python Block」というブロックがあるので、こちらを使ったほうが気軽でよい※※

GNU Radio Companion上で、自作のブロックを使うにはgr_modtoolを利用するらしい。

これをWindowsインストーラー版で動かすのに色々あったので記録にのこす。 ※インストール場所はC:\Program Files\GNURadio-3.7で説明するので、自分の環境に適宜読み替えて下さい

GNU Radio のWindowsインストーラー版にも、gr_modtoolは存在する。 しかし、GNU Radio CompanionにてLinux版のように

gr_modtool

とやっても起動することは出来ない。 色々直さないと動かないので、出てきたエラーを根気強く直す・・・

まず、gr_modtoolの場所。

インストールしたフォルダ/bin (例:C:\Program Files\GNURadio-3.7\bin) の中にgr_modtool.pyが存在する。これが本体。

WindowsではGNU Radio Command Prompt上で

>cd "C:\Program Files\GNURadio-3.7\bin"
>python gr_modtool.py

とする。が、そのままではエラーで動かない。

pipが動かない

エラー文によると、import readlineができないということだったので、pipで入れようとする。 ・・・が、動かない

pipへのパスを通す

pipはC:/Program Files/GNURadio-3.7/gr-python27/Tools/scripts/フォルダ内に保管されているので、ここへのパスを通す。

インストール時、スタートメニューにGNU Radio Command Promptの本体はbin内のrun_gr.batなので、 run_gr.batでset PATHしているところに以下追加

set PATH=(略)%~dp0..\gr-python27\Tools\scripts;

これで

pip

とやるとpip.exeが動くようになったが、動いた先でプロセスが生成できないとか言って落ちる。

PYTHONPATHに追加する

環境変数のPYTHONPATHに以下を追加

%~dp0..\gr-python27\Scripts;%~dp0..\gr-python27\Tools\scripts;

これをしたら、exe版が動くようになった

pipをアップデートする

pipのバージョンが少し古いと警告が出ているのでアップデートしたいがそのまま

python -m pip install pip --upgrade

とやっても動かない。

Windows版 python で pip の upgrade に失敗する - takaya030の備忘録

を参考に

python -m pip install --force-reinstall --upgrade pip

を試みるとアップデート出来た。

readlineの代替パッケージをインストールする。

ここでreadlineのインストールを試みたが、このreadlineは古い。

新しいものはgnureadlineだがwindows非対応なので、互換モジュールのpyreadlineをインストールする。

pip install pyreadline

gr_modtoolが動かない

newmodフォルダ見当たらない

ここまでくるとようやくgr_modtool.pyが動くようになる(やった!!)

ということで新しいモジュールを作成しようと試みる

python gr_modtool.py newmod mymodule

が、フォルダが見つからないと怒られる。

C:\Program Files\GNURadio-3.7\lib\site-packages\gnuradio\modtool\modtool_newmod.py

            options.srcdir = '/usr/local/share/gnuradio/modtool/gr-newmod'

            options.srcdir = 'C:\Program Files\GNURadio-3.7\share\gnuradio\modtool\gr-newmod\'

に変更(パスはインストール先によって適宜変更)。 ※ほんとは C:\Program Files\GNURadio-3.7\etc\gnuradio\conf.d\modtool.conf に書いてあるパスを読む作りになっているのだがうまく読まれていない。(そこまで追う気力はもうない)

CMakeでBoost無いと怒られる

ここまで来たらnewmodでフォルダのテンプレートを作ることができたので、cmakeでビルドする。

python gr_modtool.py newmod mymodule
cd gr-mymodule
python ..\gr_modtool.py add half_ff
(中略)
mkdir build 
cd build
cmake ..

Boostが無いと怒られる。入れる。

Boostライブラリのビルド方法 - boostjp

環境変数の設定を一応やる。(CMakeのログ見るともう使われていない感じだったけど) BoostをリンクするCMakeプロジェクト - MinGW on MSYS - C++ ClockUpMemo

cppunitを入れる

boostが入ると、cppunitも無いと怒られる。入れましょう。

cppunit-msvc download | SourceForge.net

CMakeがcppunitを見つけられない問題

ただ、入れただけでは認識しません。

(あんまり良い直し方じゃない)

CMakeのfind_packageを動かすために、pkg-confingを入れる。

Windowsにpkg configをインストールするには? - コードログ

このままだとcppunitを認識してないので、pkgconfig用のファイルを作る

C:\Program Files\GNURadio-3.7\lib\pkgconfig に cppunit.pc を作る。

内容はこんな感じだが、ちゃんと動いていないので間違ってると思われる。

prefix=C:/lib/ppunit
exec_prefix=${prefix}
libdir=${exec_prefix}/Lib
includedir=${prefix}/Include

Name: cppunit
Description: cppunit description
Requires:
Version: 
Libs: -L${libdir}
Cflags:  -I${includedir}

find_packageでfound!っていうようにはなったが、相変わらずLib/Includeを認識しない。

しょうがないので C:\Program Files\GNURadio-3.7\bin\gr-mymodule\cmake\Modules\FindCppUnit.cmake

の、FIND_PATH/FIND_LIBRARYの末尾に下記追加

FIND_PATH 
...(中略)
    C:\lib\cppunit\Include
  )
FIND_LIBRARY ....
...(中略)
    C:\lib\cppunit\Lib\Release-x64
  )

これでビルドが通った