我在为OpenBTS编译收发器52M时遇到问题,我有一个Ettus B200外围设备,并且安装了UHD版本UHD_003.010.git-156-g2d68f228。
但一旦我开始编译Transceiver52M,我就会出现以下错误;归档行是(完整的构建输出在这里):
libtool: link: g++ -g -O2 -Wall -pthread -rdynamic -DTIMESTAMP_ISO="2016-03-28T20:57:00" -o transceiver runTransceiver.o /usr/local/lib/libuhd.so ./.libs/libtransceiver.a ../GSM/.libs/libGSM.a ../C
ommonLibs/.libs/libcommon.a -ldl /usr/lib/x86_64-linux-gnu/libsqlite3.so -la53 -lzmq -pthread
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::stop()':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:673: undefined reference to `uhd::stream_cmd_t::stream_cmd_t(uhd::stream_cmd_t::stream_mode_t const&)'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd::usrp::multi_usrp::set_rx_gain(double, unsigned long)':
/usr/local/include/uhd/usrp/multi_usrp.hpp:500: undefined reference to `uhd::usrp::multi_usrp::ALL_GAINS'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd::usrp::multi_usrp::set_tx_gain(double, unsigned long)':
/usr/local/include/uhd/usrp/multi_usrp.hpp:786: undefined reference to `uhd::usrp::multi_usrp::ALL_GAINS'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::writeSamples(short*, int, bool*, unsigned long long, bool)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:810: undefined reference to `uhd::tx_metadata_t::tx_metadata_t()'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:814: undefined reference to `uhd::time_spec_t::from_ticks(long long, double)'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:847: undefined reference to `uhd::get_version_string()'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::uhd_device(int, bool)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:343: undefined reference to `uhd::time_spec_t::time_spec_t(long, double)'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::parse_dev_type()':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:479: undefined reference to `uhd::device::get_tree() const'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:480: undefined reference to `uhd::fs_path::fs_path(char const*)'
./.libs/libtransceiver.a(UHDDevice.o): In function `rx_metadata_t':
/usr/local/include/uhd/types/metadata.hpp:37: undefined reference to `uhd::time_spec_t::time_spec_t(double)'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd::rx_metadata_t::reset()':
/usr/local/include/uhd/types/metadata.hpp:45: undefined reference to `uhd::time_spec_t::time_spec_t(double)'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::restart(uhd::time_spec_t)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:629: undefined reference to `uhd::stream_cmd_t::stream_cmd_t(uhd::stream_cmd_t::stream_mode_t const&)'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:637: undefined reference to `uhd::stream_cmd_t::stream_cmd_t(uhd::stream_cmd_t::stream_mode_t const&)'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::start()':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:654: undefined reference to `uhd::msg::register_handler(void (* const&)(uhd::msg::type_t, std::string const&))'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:660: undefined reference to `uhd::time_spec_t::time_spec_t(double)'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:663: undefined reference to `uhd::time_spec_t::get_real_secs() const'
./.libs/libtransceiver.a(UHDDevice.o): In function `smpl_buf::avail_smpls(uhd::time_spec_t) const':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:987: undefined reference to `uhd::time_spec_t::to_ticks(double) const'
./.libs/libtransceiver.a(UHDDevice.o): In function `smpl_buf::read(void*, unsigned long, uhd::time_spec_t)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:1033: undefined reference to `uhd::time_spec_t::to_ticks(double) const'
./.libs/libtransceiver.a(UHDDevice.o): In function `smpl_buf::write(void*, unsigned long, uhd::time_spec_t)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:1074: undefined reference to `uhd::time_spec_t::to_ticks(double) const'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::init_gains()':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:359: undefined reference to `uhd::meta_range_t::meta_range_t()'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd::usrp::multi_usrp::get_tx_gain_range(unsigned long)':
/usr/local/include/uhd/usrp/multi_usrp.hpp:838: undefined reference to `uhd::usrp::multi_usrp::ALL_GAINS'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::init_gains()':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:362: undefined reference to `uhd::meta_range_t::start() const'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:363: undefined reference to `uhd::meta_range_t::stop() const'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:366: undefined reference to `uhd::meta_range_t::start() const'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:367: undefined reference to `uhd::meta_range_t::stop() const'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::setTxFreq(double)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:862: undefined reference to `uhd::tune_request_t::tune_request_t(double)'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:863: undefined reference to `uhd::tune_result_t::to_pp_string() const'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::setRxFreq(double)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:871: undefined reference to `uhd::tune_request_t::tune_request_t(double)'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:872: undefined reference to `uhd::tune_result_t::to_pp_string() const'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::open(std::string const&, bool)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:531: undefined reference to `uhd::device_addr_t::device_addr_t(std::string const&)'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:532: undefined reference to `uhd::device::find(uhd::device_addr_t const&, uhd::device::device_filter_t)'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:539: undefined reference to `uhd::device_addr_t::to_string() const'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:541: undefined reference to `uhd::usrp::multi_usrp::make(uhd::device_addr_t const&)'
./.libs/libtransceiver.a(UHDDevice.o): In function `stream_args_t':
/usr/local/include/uhd/stream.hpp:63: undefined reference to `uhd::device_addr_t::device_addr_t(std::string const&)'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::open(std::string const&, bool)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:543: undefined reference to `uhd::device_addr_t::to_string() const'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::str_code(uhd::rx_metadata_t)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:925: undefined reference to `uhd::time_spec_t::get_real_secs() const'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::check_rx_md_err(uhd::rx_metadata_t&, long)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:689: undefined reference to `uhd::time_spec_t::time_spec_t(double)'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:716: undefined reference to `uhd::operator<(uhd::time_spec_t const&, uhd::time_spec_t const&)'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:719: undefined reference to `uhd::time_spec_t::get_real_secs() const'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:718: undefined reference to `uhd::time_spec_t::get_real_secs() const'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::readSamples(short*, int, bool*, unsigned long long, bool*, unsigned int*)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:732: undefined reference to `uhd::time_spec_t::time_spec_t(double)'
./.libs/libtransceiver.a(UHDDevice.o): In function `rx_metadata_t':
/usr/local/include/uhd/types/metadata.hpp:37: undefined reference to `uhd::time_spec_t::time_spec_t(double)'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd::rx_metadata_t::reset()':
/usr/local/include/uhd/types/metadata.hpp:45: undefined reference to `uhd::time_spec_t::time_spec_t(double)'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::readSamples(short*, int, bool*, unsigned long long, bool*, unsigned int*)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:745: undefined reference to `uhd::time_spec_t::from_ticks(long long, double)'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:746: undefined reference to `uhd::time_spec_t::get_real_secs() const'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:781: undefined reference to `uhd::time_spec_t::get_real_secs() const'
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:770: undefined reference to `uhd::get_version_string()'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::str_code(uhd::async_metadata_t)':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:958: undefined reference to `uhd::time_spec_t::get_real_secs() const'
./.libs/libtransceiver.a(UHDDevice.o): In function `async_metadata_t':
/usr/local/include/uhd/types/metadata.hpp:169: undefined reference to `uhd::time_spec_t::time_spec_t(double)'
./.libs/libtransceiver.a(UHDDevice.o): In function `uhd_device::setPriority()':
/home/openbts/dev/openbts/Transceiver52M/UHDDevice.cpp:683: undefined reference to `uhd::set_thread_priority_safe(float, bool)'
collect2: error: ld returned 1 exit status
make[2]: *** [transceiver] Error 1
make[2]: Leaving directory `/home/openbts/dev/openbts/Transceiver52M'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/openbts/dev/openbts'
这是具有多个竞争UHD安装的症状。也许您已经从Linux Distro的存储库中安装了UHD,然后再次手动安装UHD?或者您在构建OpenBTS时已经安装了它。
但是,请确保您的构建系统只找到一个安装,否则您会看到您现在正在经历的事情。