Monday, January 17, 2011

Building GNU Radio on Fedora 14 (x86_64)

After installing the pre-requisites listed on the GNU Radio site (http://gnuradio.org/redmine/wiki/gnuradio/FedoraInstall) I ran into an issue while compiling:

usrp2.cc:41:33: error: type/value mismatch at argument 1 in template parameter list for ‘template class boost::weak_ptr’
usrp2.cc:41:33: error:   expected a type, got ‘usrp2::usrp2::usrp2’
usrp2.cc:43:75: error: type/value mismatch at argument 1 in template parameter list for ‘template class boost::weak_ptr’
usrp2.cc:43:75: error:   expected a type, got ‘usrp2::usrp2::usrp2’
usrp2.cc: In static member function ‘static usrp2::usrp2::sptr usrp2::usrp2::find_existing_or_make_new(const std::string&, usrp2::props*, size_t)’:
usrp2.cc:60:20: error: request for member ‘expired’ in ‘p.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator-> [with _Iterator = usrp2::usrp_table_entry*, _Container = std::vector, __gnu_cxx::__normal_iterator<_Iterator, _Container>::pointer = usrp2::usrp_table_entry*]()->usrp2::usrp_table_entry::value’, which is of non-class type ‘int’
usrp2.cc:64:31: error: no matching function for call to ‘boost::shared_ptr::shared_ptr(int&)’
/usr/include/boost/smart_ptr/shared_ptr.hpp:182:5: note: candidates are: boost::shared_ptr::shared_ptr() [with T = usrp2::usrp2]
/usr/include/boost/smart_ptr/shared_ptr.hpp:169:1: note:                 boost::shared_ptr::shared_ptr(const boost::shared_ptr&)
usrp2.cc:73:23: error: expected type-specifier
usrp2.cc:73:23: error: expected ‘)’
usrp2.cc:74:30: error: no matching function for call to ‘usrp2::usrp_table_entry::usrp_table_entry(std::string&, usrp2::usrp2::sptr&)’
usrp2.cc:43:5: note: candidates are: usrp2::usrp_table_entry::usrp_table_entry(const std::string&, int)
usrp2.cc:38:27: note:                 usrp2::usrp_table_entry::usrp_table_entry(const usrp2::usrp_table_entry&)
In file included from /usr/include/boost/shared_ptr.hpp:17:0,
                 from /home/tja/Research/gnuradio/energy/gnuradio-3.3.0/usrp2/host/include/usrp2/usrp2.h:22,
                 from usrp2.cc:23:
/usr/include/boost/smart_ptr/shared_ptr.hpp: In constructor ‘boost::shared_ptr::shared_ptr(Y*) [with Y = int, T = usrp2::usrp2]’:
usrp2.cc:73:56:   instantiated from here
/usr/include/boost/smart_ptr/shared_ptr.hpp:187:50: error: cannot convert ‘int*’ to ‘usrp2::usrp2*’ in initialization

Eric Blossom reccommended using the latest GIT branch, however there was a patch to fix this issue using the 3.3.0 tarball:

diff --git a/usrp2/host/lib/usrp2.cc b/usrp2/host/lib/usrp2.cc
index f0ee564..0842482 100644
--- a/usrp2/host/lib/usrp2.cc
+++ b/usrp2/host/lib/usrp2.cc
@@ -38,9 +38,9 @@ namespace usrp2 {
   struct usrp_table_entry {
     // inteface + normalized mac addr ("eth0:01:23:45:67:89:ab")
     std::string key;
-    boost::weak_ptr  value;
+    boost::weak_ptr  value;
 
-    usrp_table_entry(const std::string &_key, boost::weak_ptr _value)
+    usrp_table_entry(const std::string &_key, boost::weak_ptr _value)
       : key(_key), value(_value) {}
   };
 
@@ -70,7 +70,7 @@ namespace usrp2 {
     // We don't have the USRP2 we're looking for
 
     // create a new one and stick it in the table.
-    usrp2::sptr r(new usrp2::usrp2(ifc, pr, rx_bufsize));
+    usrp2::sptr r(new usrp2(ifc, pr, rx_bufsize));
     usrp_table_entry t(key, r);
     s_table.push_back(t);

After copying the patch to a file it can be applied with the following command:

patch -p1 

No comments:

Post a Comment