gr-howto-write-a-blockでコンパイル戦記

「gr-howto-write-a-blockでコンパイル戦記」の編集履歴(バックアップ)一覧に戻る

gr-howto-write-a-blockでコンパイル戦記 - (2011/06/29 (水) 12:46:03) のソース

gr-how-to-write-a-blockを[[この>http://www.mlab.t.u-tokyo.ac.jp/~saru/usrp/index.php?%A5%D6%A5%ED%A5%C3%A5%AF%A4%CE%BA%EE%A4%EA%CA%FD]]通りにやったけど、
howtoモジュールをimportすると以下のようなエラーがでる。
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "howto.py", line 6, in <module>
     import _howto
 ImportError: ./_howto.so: undefined symbol: _Z19howto_make_print_ffv

howto_make_print_ffのライブラリオブジェクトである、_howto_la-print_ff.loが生成されていないので、
おそらくリンクに失敗している。
Makefile.amの変更(howto_print_ffのコンパイル)がMakeFILEに反映されていなかった。
親ディレクトリで、automake→configure→make→make installする必要がる。(詳しくは[[ここ>http://www.02.246.ne.jp/~torutk/cxx/automake/automake.html]]
)
しかし、automakeパッケージをインストールできなかった。
ubuntu9.04(jaunty)のレポジトリはもうなく、apt-get updateができなくなってしまっている。
なので、/etc/apt/sources.listを以下のように編集する必要がある。
 deb http://archive.ubuntu.com/ubuntu jaunty main restricted universe multiverse
 deb http://archive.ubuntu.com/ubuntu jaunty-updates main restricted universe multiverse
 deb-src http://archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe multiverse
を
 deb http://old-releases.ubuntu.com/ubuntu jaunty main restricted universe multiverse
 deb http://old-releases.ubuntu.com/ubuntu jaunty-updates main restricted universe multiverse
 deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty-updates main restricted universe multiverse
と編集する必要がある。  

なぜかqa_print_ff.pyはエラーをはいたが、/usr/lib/python2.6/dist-package/gnuradio/ではimpor print_ffに成功した。
以下、作成したhowto.print_ffを動作させたpythonスクリプト(test_print_ff.py)。なぜかpython test_print_ff.pyとやらないとエラーがでる。 
 from gnuradio import gr, howto
 
 class my_top_block(gr.top_block):
     def __init__(self):
         gr.top_block.__init__(self)
         src_data = (-3, 4, -5.5, 2, 3, 1, 3, 4 ,5)
         src = gr.vector_source_f (src_data)
         sqr = howto.print_ff ()
         dst = gr.vector_sink_f ()
         self.connect (src, sqr)
         self.connect (sqr, dst) 
 
 def main():
     tb = my_top_block()
     my_top_block().run()
        
 if __name__=='__main__':
     try:
         main()
     except KeyboardInterrupt:
         pass
結果
 root@omori-desktop:/usr/share/gnuradio/examples/digital# python test_print_ff.py 
 noutput_items = 8
 in[0]=-3.000000, out[0]=-3.000000
 in[1]=4.000000, out[1]=4.000000
 in[2]=-5.500000, out[2]=-5.500000
 in[3]=2.000000, out[3]=2.000000
 in[4]=3.000000, out[4]=3.000000
 in[5]=1.000000, out[5]=1.000000
 in[6]=3.000000, out[6]=3.000000
 in[7]=4.000000, out[7]=4.000000
 noutput_items = 1
 in[0]=5.000000, out[0]=5.000000
ブロックを編集した場合は親ディレクトリでmake→make installでライブラリは更新される!        
新しいブロックを作成した場合は、automake→configure→make→make install!


----