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が無いと怒られる。入れる。
環境変数の設定を一応やる。(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 )
これでビルドが通った