2017-02-23 18 views
3

Ive пытался скомпилировать код, приведенный в следующем веб-сайте, чтобы создать USRP объект https://kb.ettus.com/Getting_Started_with_UHD_and_C%2B%2BНеопределенное Ссылка [USRP] [UHD]

Для ленивых больной просто включить код:

#include <uhd/utils/thread_priority.hpp> 
#include <uhd/utils/safe_main.hpp> 
#include <uhd/usrp/multi_usrp.hpp> 
#include <uhd/exception.hpp> 
#include <uhd/types/tune_request.hpp> 
#include <boost/program_options.hpp> 
#include <boost/format.hpp> 
#include <boost/thread.hpp> 
#include <iostream> 

int UHD_SAFE_MAIN(int argc, char *argv[]) { 
    uhd::set_thread_priority_safe(); 

    std::string device_args("addr=192.168.10.2"); 
    std::string subdev("A:0"); 
    std::string ant("TX/RX"); 
    std::string ref("internal"); 

    double rate(1e6); 
    double freq(915e6); 
    double gain(10); 
    double bw(1e6); 

    //create a usrp device 
    std::cout << std::endl; 
    std::cout << boost::format("Creating the usrp device with: %s...") % device_args << std::endl; 
    uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(device_args); 

    // Lock mboard clocks 
    std::cout << boost::format("Lock mboard clocks: %f") % ref << std::endl; 
    usrp->set_clock_source(ref); 

    //always select the subdevice first, the channel mapping affects the other settings 
    std::cout << boost::format("subdev set to: %f") % subdev << std::endl; 
    usrp->set_rx_subdev_spec(subdev); 
    std::cout << boost::format("Using Device: %s") % usrp->get_pp_string() << std::endl; 

    //set the sample rate 
    if (rate <= 0.0) { 
     std::cerr << "Please specify a valid sample rate" << std::endl; 
     return ~0; 
    } 

    // set sample rate 
    std::cout << boost::format("Setting RX Rate: %f Msps...") % (rate/1e6) << std::endl; 
    usrp->set_rx_rate(rate); 
    std::cout << boost::format("Actual RX Rate: %f Msps...") % (usrp->get_rx_rate()/1e6) << std::endl << std::endl; 

    // set freq 
    std::cout << boost::format("Setting RX Freq: %f MHz...") % (freq/1e6) << std::endl; 
    uhd::tune_request_t tune_request(freq); 
    usrp->set_rx_freq(tune_request); 
    std::cout << boost::format("Actual RX Freq: %f MHz...") % (usrp->get_rx_freq()/1e6) << std::endl << std::endl; 

    // set the rf gain 
    std::cout << boost::format("Setting RX Gain: %f dB...") % gain << std::endl; 
    usrp->set_rx_gain(gain); 
    std::cout << boost::format("Actual RX Gain: %f dB...") % usrp->get_rx_gain() << std::endl << std::endl; 

    // set the IF filter bandwidth 
    std::cout << boost::format("Setting RX Bandwidth: %f MHz...") % (bw/1e6) << std::endl; 
    usrp->set_rx_bandwidth(bw); 
    std::cout << boost::format("Actual RX Bandwidth: %f MHz...") % (usrp->get_rx_bandwidth()/1e6) << std::endl << std::endl; 

    // set the antenna 
    std::cout << boost::format("Setting RX Antenna: %s") % ant << std::endl; 
    usrp->set_rx_antenna(ant); 
    std::cout << boost::format("Actual RX Antenna: %s") % usrp->get_rx_antenna() << std::endl << std::endl; 

    return EXIT_SUCCESS; 
} 

Я сначала был использование GCC компилятора через блоки кода затем решили проверить GCC и г ++ с MinGW с помощью командной строки, как во время компиляции в результате этого:

main.cpp:17: undefined reference to `_imp___ZN3uhd24set_thread_priority_safeEfb' 
    main.cpp:32: undefined reference to `_imp___ZN3uhd13device_addr_tC1ERKSs' 
    main.cpp:32: undefined reference to `_imp___ZN3uhd4usrp10multi_usrp4makeERKNS_13device_addr_tE' 
    main.cpp:40: undefined reference to `_imp___ZN3uhd4usrp13subdev_spec_tC1ERKSs' 
    main.cpp:56: undefined reference to `_imp___ZN3uhd14tune_request_tC1Ed' 
    obj\Debug\main.o: In function `ZN3uhd4usrp10multi_usrp11set_rx_gainEdj': 
    multi_usrp.hpp:595: undefined reference to `_imp___ZN3uhd4usrp10multi_usrp9ALL_GAINSE' 
    obj\Debug\main.o: In function `ZN3uhd4usrp10multi_usrp11get_rx_gainEj': 
    multi_usrp.hpp:637: undefined reference to `_imp___ZN3uhd4usrp10multi_usrp9ALL_GAINSE' 
    collect2.exe: error: ld returned 1 exit status 

Я читал о том, чтобы связать файлы lib с проектом, но загруженный API, похоже, не имеет .lib, .a или любых других файлов типа lib. Я загрузил его со своего сайта, http://files.ettus.com/manual/page_install.html.

Любая помощь была бы чрезвычайно оценена, я пытался выяснить, в чем проблема в течение нескольких часов. В качестве примечания, я работаю над ОС Windows 10.

ответ

2

Все это просто ошибки компоновщика, говорящие, что, эй, вам нужно добавить библиотеки компоновщиков.

Я не знаю, что вы скачали ровно, но установщики Windows должны поставляться с .lib и .dll, необходимыми для соединения под окнами. в противном случае, если вы загрузили исходный код, вам нужно будет следовать руководству по сборке UHD на окнах и добавить полученную библиотеку в список ссылок.

+0

Мне удалось найти .lib-файл для UHD и связать его, перейдя в настройки компоновщика моего проекта и добавив каталог туда, где находится .lib-файл, но я продолжаю получать те же ошибки. Файл представляет собой библиотеку моделей pspice, я не знаю, имеет ли это отношение к чему-либо – zapper9595

+0

hey zapper, очень сложно отлаживать что-то подобное удаленно, но если вы все еще получаете те же ошибки компоновщика, вы не использовали правильные библиотеки, или вы не используете его в нужном месте. –

+0

Я думаю, что бинарная установка пропустила некоторые файлы, я свяжусь с ними и посмотрю, что они должны сказать, спасибо Маркусу! – zapper9595

Смежные вопросы