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