One simple thing that can cause this is forgetting to do "sudo ldconfig"
after you do your first "sudo make install"

Various things can cause this, it's a cryptic error that I always hate
seeing.

Rich

On Wed, Aug 19, 2015 at 11:51 AM, West, Nathan <n...@ostatemail.okstate.edu>
wrote:

> My gut is telling me this is a swig problem. I don't know that it's
> frowned upon, but it's not easy to read without some kind of highlighting
> that we'd get from github or a gist with files. If I'm correct we'd also
> need to see swig/ACK.i (probably missing an include and/or gr swig block
> magic. compare to tutorial swig for sanity check)
>
> On Wed, Aug 19, 2015 at 10:38 AM, Washbourne, Logan <
> lwas...@ostatemail.okstate.edu> wrote:
>
>> Hello all,
>>
>> I know this question has been asked before, several times, but I didn't
>> find a solution that allowed me to use my OOT blocks without running into
>> the error stated in the subject of this email.
>>
>> I scoured through this webpage(
>> http://gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModulesConfig)
>> and tried adding:
>> set(GR_REQUIRED_COMPONENTS RUNTIME PMT)
>>
>> to my top level CMakeLists.txt file, because I am using PMT objects in my
>> block, but that didn't get rid of the error.
>>
>> The full error thrown is this:
>>
>> Executing: "/home/comm1/Logan/Thesis/top_block.py"
>>
>> Traceback (most recent call last):
>>   File "/home/comm1/Logan/Thesis/top_block.py", line 92, in <module>
>>     tb = top_block()
>>   File "/home/comm1/Logan/Thesis/top_block.py", line 65, in __init__
>>     self.ACK_Text_Sanitize_0 = ACK.Text_Sanitize()
>> AttributeError: 'module' object has no attribute 'Text_Sanitize'
>>
>>
>> I looked on the mailing list for that last line error and it pointed me
>> to doing what I mentioned above with the CMakeLists.txt file, but could it
>> be an actual problem with the top_block.py file?
>>
>> In the addendum is all of the files I could think would be necessary for
>> someone to look at if they chose to, if including this much text is frowned
>> upon, please let me know.
>>
>>
>> Addendum:
>>
>> Text_Sanitize_impl.cc
>>
>> *****************************************************************************
>> #ifdef HAVE_CONFIG_H
>> #include "config.h"
>> #endif
>>
>> #include <gnuradio/io_signature.h>
>> #include "Text_Sanitize_impl.h"
>> #include <pmt/pmt.h>
>> #include <stdio.h>
>> #include <string>
>> #include <iostream>
>> #include <cstdio>
>>
>> namespace gr {
>>   namespace ACK {
>>
>>     Text_Sanitize::sptr
>>     Text_Sanitize::make(char* message)
>>     {
>>       return gnuradio::get_initial_sptr
>>         (new Text_Sanitize_impl(message));
>>     }
>>
>>     void
>>     Text_Sanitize_impl::print_message(pmt::pmt_t d_message)
>>     {
>>     pmt::print(d_message);
>>     }
>>
>>
>>
>>
>>     /*
>>     void
>>     Text_Sanitize_impl::forecast (int noutput_items, gr_vector_int
>> &ninput_items_required)
>>     {
>>          <+forecast+> e.g. ninput_items_required[0] = noutput_items
>>     }
>>     */
>>     int
>>     Text_Sanitize_impl::general_work (int noutput_items,
>>                        gr_vector_int &ninput_items,
>>                        gr_vector_const_void_star &input_items,
>>                        gr_vector_void_star &output_items)
>>     {
>>         const int *in = (int *) input_items[0];
>>         pmt::pmt_t *out = (pmt::pmt_t *) output_items[0];
>>
>>
>>     d_out_msg = pmt::string_to_symbol(d_message);
>>     //for(int i = 0; i<strlen(d_message); i++)
>>     //{
>>     //    pmt::vector_set(d_out_msg,i,d_message[i]);
>>     //}
>>
>>         // Do <+signal processing+>
>>         // Tell runtime system how many input items we consumed on
>>         // each input stream.
>>         consume_each (noutput_items);
>>
>>         // Tell runtime system how many output items we produced.
>>         return noutput_items;
>>     }
>>
>>     /*
>>      * The private constructor
>>      */
>>     Text_Sanitize_impl::Text_Sanitize_impl(char* message)
>>       : gr::block("Text_Sanitize",
>>               gr::io_signature::make(1, 1, sizeof(int)),
>>               gr::io_signature::make(1, 1, sizeof(pmt::pmt_t))),
>>         d_out_msg(pmt::string_to_symbol(std::string(""))),
>>         d_message(message)
>>     {
>>
>>     message_port_register_out(pmt::mp("print_message"));
>>     set_msg_handler(pmt::mp("print"),
>> boost::bind(&Text_Sanitize_impl::print_message, this, _1));
>>     }
>>
>>     /*
>>      * Our virtual destructor.
>>      */
>>     Text_Sanitize_impl::~Text_Sanitize_impl()
>>     {
>>     }
>>
>>
>>   } /* namespace ACK */
>> } /* namespace gr */
>>
>>
>> *****************************************************************************
>>
>> Text_Sanitize_impl.h
>>
>> ******************************************************************************
>> #ifndef INCLUDED_ACK_TEXT_SANITIZE_IMPL_H
>> #define INCLUDED_ACK_TEXT_SANITIZE_IMPL_H
>>
>> #include <ACK/Text_Sanitize.h>
>> #include <gnuradio/block.h>
>> #include <gnuradio/thread/thread.h>
>> #include <pmt/pmt.h>
>>
>> namespace gr {
>>   namespace ACK {
>>
>>     class Text_Sanitize_impl : public Text_Sanitize
>>     {
>>      private:
>>       // Nothing to declare in this block.
>>     pmt::pmt_t d_out_msg;
>>     char* d_message;
>>     void print_message(pmt::pmt_t d_message);
>>
>>
>>      public:
>>       Text_Sanitize_impl(char* message);
>>       ~Text_Sanitize_impl();
>>
>>       // Where all the action really happens
>>       void forecast (int noutput_items, gr_vector_int
>> &ninput_items_required);
>>
>>       int general_work(int noutput_items,
>>                gr_vector_int &ninput_items,
>>                gr_vector_const_void_star &input_items,
>>                gr_vector_void_star &output_items);
>>     };
>>
>>   } // namespace ACK
>> } // namespace gr
>>
>> #endif /* INCLUDED_ACK_TEXT_SANITIZE_IMPL_H */
>>
>>
>> *****************************************************************************
>>
>> Text_Sanitize.h
>>
>> ****************************************************************************
>> #ifndef INCLUDED_ACK_TEXT_SANITIZE_H
>> #define INCLUDED_ACK_TEXT_SANITIZE_H
>>
>> #include <ACK/api.h>
>> #include <gnuradio/block.h>
>>
>> namespace gr {
>>   namespace ACK {
>>
>>     /*!
>>      * \brief <+description of block+>
>>      * \ingroup ACK
>>      *
>>      */
>>     class ACK_API Text_Sanitize : virtual public gr::block
>>     {
>>      public:
>>       typedef boost::shared_ptr<Text_Sanitize> sptr;
>>
>>       /*!
>>        * \brief Return a shared_ptr to a new instance of
>> ACK::Text_Sanitize.
>>        *
>>        * To avoid accidental use of raw pointers, ACK::Text_Sanitize's
>>        * constructor is in a private implementation
>>        * class. ACK::Text_Sanitize::make is the public interface for
>>        * creating new instances.
>>        */
>>       static sptr make(char* message);
>>     };
>>
>>   } // namespace ACK
>> } // namespace gr
>>
>> #endif /* INCLUDED_ACK_TEXT_SANITIZE_H */
>>
>> ****************************************************************************
>>
>> Top Level CMakeLists.txt
>>
>> ***************************************************************************
>> ########################################################################
>> # Project setup
>> ########################################################################
>> cmake_minimum_required(VERSION 2.6)
>> project(gr-ACK CXX C)
>> enable_testing()
>>
>> #select the release build type by default to get optimization flags
>> if(NOT CMAKE_BUILD_TYPE)
>>    set(CMAKE_BUILD_TYPE "Release")
>>    message(STATUS "Build type not specified: defaulting to release.")
>> endif(NOT CMAKE_BUILD_TYPE)
>> set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
>>
>> #make sure our local CMake Modules path comes first
>> list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
>>
>> ########################################################################
>> # Compiler specific setup
>> ########################################################################
>> if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
>>     #http://gcc.gnu.org/wiki/Visibility
>>     add_definitions(-fvisibility=hidden)
>> endif()
>>
>> ########################################################################
>> # Find boost
>> ########################################################################
>> if(UNIX AND EXISTS "/usr/lib64")
>>     list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
>> endif(UNIX AND EXISTS "/usr/lib64")
>> set(Boost_ADDITIONAL_VERSIONS
>>     "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38"
>> "1.39.0" "1.39"
>>     "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43"
>> "1.44.0" "1.44"
>>     "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48"
>> "1.49.0" "1.49"
>>     "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53"
>> "1.54.0" "1.54"
>>     "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58"
>> "1.59.0" "1.59"
>>     "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63"
>> "1.64.0" "1.64"
>>     "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68"
>> "1.69.0" "1.69"
>> )
>> find_package(Boost "1.35" COMPONENTS filesystem system)
>>
>> if(NOT Boost_FOUND)
>>     message(FATAL_ERROR "Boost required to compile ACK")
>> endif()
>>
>> ########################################################################
>> # Install directories
>> ########################################################################
>> include(GrPlatform) #define LIB_SUFFIX
>> set(GR_RUNTIME_DIR      bin)
>> set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
>> set(GR_INCLUDE_DIR      include/ACK)
>> set(GR_DATA_DIR         share)
>> set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
>> set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
>> set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
>> set(GR_CONF_DIR         etc)
>> set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
>> set(GR_LIBEXEC_DIR      libexec)
>> set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
>> set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
>>
>> ########################################################################
>> # On Apple only, set install name and use rpath correctly, if not already
>> set
>> ########################################################################
>> if(APPLE)
>>     if(NOT CMAKE_INSTALL_NAME_DIR)
>>         set(CMAKE_INSTALL_NAME_DIR
>>             ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
>>             PATH "Library Install Name Destination Directory" FORCE)
>>     endif(NOT CMAKE_INSTALL_NAME_DIR)
>>     if(NOT CMAKE_INSTALL_RPATH)
>>         set(CMAKE_INSTALL_RPATH
>>             ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
>>             PATH "Library Install RPath" FORCE)
>>     endif(NOT CMAKE_INSTALL_RPATH)
>>     if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
>>         set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE
>>             BOOL "Do Build Using Library Install RPath" FORCE)
>>     endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
>> endif(APPLE)
>>
>> ########################################################################
>> # Find gnuradio build dependencies
>> ########################################################################
>> find_package(CppUnit)
>> find_package(Doxygen)
>>
>> # Search for GNU Radio and its components and versions. Add any
>> # components required to the list of GR_REQUIRED_COMPONENTS (in all
>> # caps such as FILTER or FFT) and change the version to the minimum
>> # API compatible version required.
>> set(GR_REQUIRED_COMPONENTS RUNTIME PMT STRING)
>> find_package(Gnuradio "3.7.2" REQUIRED)
>>
>> if(NOT CPPUNIT_FOUND)
>>     message(FATAL_ERROR "CppUnit required to compile ACK")
>> endif()
>>
>> ########################################################################
>> # Setup doxygen option
>> ########################################################################
>> if(DOXYGEN_FOUND)
>>     option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
>> else(DOXYGEN_FOUND)
>>     option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
>> endif(DOXYGEN_FOUND)
>>
>> ########################################################################
>> # Setup the include and linker paths
>> ########################################################################
>> include_directories(
>>     ${CMAKE_SOURCE_DIR}/lib
>>     ${CMAKE_SOURCE_DIR}/include
>>     ${CMAKE_BINARY_DIR}/lib
>>     ${CMAKE_BINARY_DIR}/include
>>     ${Boost_INCLUDE_DIRS}
>>     ${CPPUNIT_INCLUDE_DIRS}
>>     ${GNURADIO_RUNTIME_INCLUDE_DIRS}
>>     ${GNURADIO_ALL_INCLUDE_DIRS}
>> )
>>
>> link_directories(
>>     ${Boost_LIBRARY_DIRS}
>>     ${CPPUNIT_LIBRARY_DIRS}
>>     ${GNURADIO_RUNTIME_LIBRARY_DIRS}
>> )
>>
>> # Set component parameters
>> set(GR_ACK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE
>> INTERNAL "" FORCE)
>> set(GR_ACK_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE
>> INTERNAL "" FORCE)
>>
>> ########################################################################
>> # Create uninstall target
>> ########################################################################
>> configure_file(
>>     ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
>>     ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
>> @ONLY)
>>
>> add_custom_target(uninstall
>>     ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
>> )
>>
>> ########################################################################
>> # Add subdirectories
>> ########################################################################
>> add_subdirectory(include/ACK)
>> add_subdirectory(lib)
>> add_subdirectory(swig)
>> add_subdirectory(python)
>> add_subdirectory(grc)
>> add_subdirectory(apps)
>> add_subdirectory(docs)
>>
>> ########################################################################
>> # Install cmake search helper for this library
>> ########################################################################
>> if(NOT CMAKE_MODULES_DIR)
>>   set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
>> endif(NOT CMAKE_MODULES_DIR)
>>
>> install(FILES cmake/Modules/ACKConfig.cmake
>>     DESTINATION ${CMAKE_MODULES_DIR}/ACK
>> )
>>
>> ***************************************************************************
>>
>> top_block.py
>>
>> ***************************************************************************
>> #!/usr/bin/env python2
>> ##################################################
>> # GNU Radio Python Flow Graph
>> # Title: Top Block
>> # Generated: Tue Aug 18 11:02:34 2015
>> ##################################################
>>
>> if __name__ == '__main__':
>>     import ctypes
>>     import sys
>>     if sys.platform.startswith('linux'):
>>         try:
>>             x11 = ctypes.cdll.LoadLibrary('libX11.so')
>>             x11.XInitThreads()
>>         except:
>>             print "Warning: failed to XInitThreads()"
>>
>> from PyQt4 import Qt
>> from gnuradio import analog
>> from gnuradio import blocks
>> from gnuradio import eng_notation
>> from gnuradio import gr
>> from gnuradio.eng_option import eng_option
>> from gnuradio.filter import firdes
>> from optparse import OptionParser
>> import ACK
>> import sys
>>
>>
>> class top_block(gr.top_block, Qt.QWidget):
>>
>>     def __init__(self):
>>         gr.top_block.__init__(self, "Top Block")
>>         Qt.QWidget.__init__(self)
>>         self.setWindowTitle("Top Block")
>>         try:
>>              self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
>>         except:
>>              pass
>>         self.top_scroll_layout = Qt.QVBoxLayout()
>>         self.setLayout(self.top_scroll_layout)
>>         self.top_scroll = Qt.QScrollArea()
>>         self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
>>         self.top_scroll_layout.addWidget(self.top_scroll)
>>         self.top_scroll.setWidgetResizable(True)
>>         self.top_widget = Qt.QWidget()
>>         self.top_scroll.setWidget(self.top_widget)
>>         self.top_layout = Qt.QVBoxLayout(self.top_widget)
>>         self.top_grid_layout = Qt.QGridLayout()
>>         self.top_layout.addLayout(self.top_grid_layout)
>>
>>         self.settings = Qt.QSettings("GNU Radio", "top_block")
>>
>> self.restoreGeometry(self.settings.value("geometry").toByteArray())
>>
>>         ##################################################
>>         # Variables
>>         ##################################################
>>         self.samp_rate = samp_rate = 32000
>>
>>         ##################################################
>>         # Blocks
>>         ##################################################
>>         self.blocks_message_debug_0 = blocks.message_debug()
>>         self.analog_const_source_x_0 = analog.sig_source_i(0,
>> analog.GR_CONST_WAVE, 0, 0, 2)
>>         self.ACK_Text_Sanitize_0 = ACK.Text_Sanitize()
>>
>>         ##################################################
>>         # Connections
>>         ##################################################
>>         self.msg_connect((self.ACK_Text_Sanitize_0, 'out'),
>> (self.blocks_message_debug_0, 'print'))
>>         self.connect((self.analog_const_source_x_0, 0),
>> (self.ACK_Text_Sanitize_0, 0))
>>
>>     def closeEvent(self, event):
>>         self.settings = Qt.QSettings("GNU Radio", "top_block")
>>         self.settings.setValue("geometry", self.saveGeometry())
>>         event.accept()
>>
>>     def get_samp_rate(self):
>>         return self.samp_rate
>>
>>     def set_samp_rate(self, samp_rate):
>>         self.samp_rate = samp_rate
>>
>>
>> if __name__ == '__main__':
>>     parser = OptionParser(option_class=eng_option, usage="%prog:
>> [options]")
>>     (options, args) = parser.parse_args()
>>     from distutils.version import StrictVersion
>>     if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
>>
>> Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
>>     qapp = Qt.QApplication(sys.argv)
>>     tb = top_block()
>>     tb.start()
>>     tb.show()
>>
>>     def quitting():
>>         tb.stop()
>>         tb.wait()
>>     qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
>>     qapp.exec_()
>>     tb = None  # to clean up Qt widgets
>>
>> ***************************************************************************
>>
>> Logan Washbourne
>> Electrical Engineering Graduate Student
>> (Electromagnetics)
>>
>>
>> _______________________________________________
>> Discuss-gnuradio mailing list
>> Discuss-gnuradio@gnu.org
>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>
>>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to