2012-07-25 112 views
4

我試圖在OpenWRT「Attittude Adjustment」(最新的主幹源)上安裝Gnu Radio。我交叉編譯的GR,一切似乎已編譯和鏈接就好了。但是,導入模塊在Python結果如下:交叉編譯Gnu Radio for Openwrt

[email protected]:/usr/lib/python2.7/dist-packages/gnuradio/gr# python 
Python 2.7.3 (default, Jul 21 2012, 17:36:54) 
[GCC 4.6.3 20120201 (prerelease)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from gnuradio import gr 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/dist-packages/gnuradio/gr/__init__.py", line 43, in <module> 
    from gnuradio_core import * 
    File "/usr/lib/python2.7/dist-packages/gnuradio/gr/gnuradio_core.py", line 23, in <module> 
    from gnuradio_core_runtime import * 
    File "/usr/lib/python2.7/dist-packages/gnuradio/gr/gnuradio_core_runtime.py", line 26, in <module> 
    _gnuradio_core_runtime = swig_import_helper() 
    File "/usr/lib/python2.7/dist-packages/gnuradio/gr/gnuradio_core_runtime.py", line 22, in swig_import_helper 
    _mod = imp.load_module('_gnuradio_core_runtime', fp, pathname, description) 
ImportError: File not found 
>>> 

注意,Python已經在包含SWIG庫的目錄被調用。這裏是ldd _gnuradio_core_runtime.so,在目標系統上運行:

checking sub-depends for '/usr/lib/libgnuradio-core-3.6.2git.so.0.0.0' 
checking sub-depends for '/usr/lib/libgruel-3.6.2git.so.0.0.0' 
checking sub-depends for '/usr/lib/libboost_date_time.so.1.49.0' 
checking sub-depends for '/usr/lib/libboost_program_options.so.1.49.0' 
checking sub-depends for '/usr/lib/libboost_filesystem.so.1.49.0' 
checking sub-depends for '/usr/lib/libboost_system.so.1.49.0' 
checking sub-depends for '/usr/lib/libboost_thread.so.1.49.0' 
checking sub-depends for '/lib/libpthread.so.0' 
checking sub-depends for '/usr/lib/libstdc++.so.6' 
checking sub-depends for '/lib/libm.so.0' 
checking sub-depends for '/lib/libgcc_s.so.1' 
checking sub-depends for '/lib/libc.so.0' 
checking sub-depends for '/usr/lib/libfftw3f.so.3' 
checking sub-depends for 'not found' 
checking sub-depends for '/lib/librt.so.0' 
checking sub-depends for '/usr/lib/libvolk.so.0.0.0' 
checking sub-depends for '/lib/libdl.so.0' 
    libgnuradio-core-3.6.2git.so.0.0.0 => /usr/lib/libgnuradio-core-3.6.2git.so.0.0.0 (0x00000000) 
    libgruel-3.6.2git.so.0.0.0 => /usr/lib/libgruel-3.6.2git.so.0.0.0 (0x00000000) 
    libboost_date_time.so.1.49.0 => /usr/lib/libboost_date_time.so.1.49.0 (0x00000000) 
    libboost_program_options.so.1.49.0 => /usr/lib/libboost_program_options.so.1.49.0 (0x00000000) 
    libboost_filesystem.so.1.49.0 => /usr/lib/libboost_filesystem.so.1.49.0 (0x00000000) 
    libboost_system.so.1.49.0 => /usr/lib/libboost_system.so.1.49.0 (0x00000000) 
    libboost_thread.so.1.49.0 => /usr/lib/libboost_thread.so.1.49.0 (0x00000000) 
    libpthread.so.0 => /lib/libpthread.so.0 (0x00000000) 
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00000000) 
    libm.so.0 => /lib/libm.so.0 (0x00000000) 
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00000000) 
    libc.so.0 => /lib/libc.so.0 (0x00000000) 
    libfftw3f.so.3 => /usr/lib/libfftw3f.so.3 (0x00000000) 
    libfftw3f_threads.so.3 => not found (0x00000000) 
    librt.so.0 => /lib/librt.so.0 (0x00000000) 
    libvolk.so.0.0.0 => /usr/lib/libvolk.so.0.0.0 (0x00000000) 
    libdl.so.0 => /lib/libdl.so.0 (0x00000000) 
    ld-uClibc.so.0 => ld-uClibc.so.0 (0x00000000) 

這裏是file _gnuradio_core_runtime.so構建系統上的輸出:

_gnuradio_core_runtime.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped 

在目標系統上的英特爾凌動運行。最後,我能想到的最後一條有用信息是PYTHONPATH設置爲/usr/lib/python2.7/dist-packages。我不知道問題在哪裏。我希望美妙的堆棧溢出社區可能有助於找到解決方案。提前感謝您的任何指針!

+2

'libfftw3f_threads.so.3 =>找不到(0x00000000)' - 我認爲那是你的問題。動態鏈接器將拒絕讓Python'dlopen()'一個不滿足依賴關係的庫。 – Flexo 2012-07-26 09:50:48

+1

這個伎倆。美麗。我一直在解決這個問題一段時間,並不知道這是因爲缺少一個庫。它似乎不在那裏。非常感謝。 – tweaksp 2012-07-26 16:48:49

回答

2

目標不見了libfftw3f_threads.so庫。由於系統調用dlopen()無法解決_gnuradio_core_runtime.so的依賴關係,因此它告訴Python無法找到該文件。我將庫複製到了目標文件夾中,確實是ldconfig,Python正確加載了庫。 (解決方案歸功於Flexo)。