使用UHD时Visual Studio 2013中未解析的外部符号

时间:2014-08-15 19:10:33

标签: c++ visual-studio-2013

我似乎无法在Visual Studio 2013中编译一个非常简单的程序。我的目标是将UHD合并到C ++程序中(UHD Driver and Libraries for Windows)。我下载并安装了Windows UHD软件包。由于库也依赖于Boost,我还下载了相应的Boost库。之后,我在Visual Studio 2013中编写了一个快速测试程序:

#include "stdafx.h"
#include <iostream>
#include <uhd\usrp\multi_usrp.hpp>
#include <uhd\types\device_addr.hpp>

using namespace uhd;

int main(void)
{
   device_addr_t hint;
   device_addrs_t dev_addrs = device::find(hint);
   system("pause");
   return 0;
}

如果有人感兴趣,该程序应找到连接到主机PC的任何USRP。我在Visual Studio中定义了适当的包含路径:Include PathsLibrary Include Paths

要清楚,我在头文件中包含两个路径: C:\Program Files (x86)\UHD\includeC:\Program Files (x86)\boost_1_55_0

和图书馆的一条路径: C:\Program Files (x86)\UHD\lib

当我编写上述程序时,Visual Studio识别出其他包含文件,将device_addr_t识别为typedef,并且没有抛出任何错误。但是,当我构建程序时,我收到了这些错误:

Error   3   error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class std::vector<class uhd::device_addr_t,class std::allocator<class uhd::device_addr_t> > __cdecl uhd::device::find(class uhd::device_addr_t const &)" (__imp_?find@device@uhd@@SA?AV?$vector@Vdevice_addr_t@uhd@@V?$allocator@Vdevice_addr_t@uhd@@@std@@@std@@ABVdevice_addr_t@2@@Z) referenced in function _main    C:\Users\...\Documents\Visual Studio 2013\Projects\uhd_test\uhd_test\uhd_test.obj   uhd_test

Error   2   error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall uhd::device_addr_t::~device_addr_t(void)" (__imp_??1device_addr_t@uhd@@QAE@XZ) referenced in function "public: void * __thiscall uhd::device_addr_t::`scalar deleting destructor'(unsigned int)" (??_Gdevice_addr_t@uhd@@QAEPAXI@Z) C:\Users\...\Documents\Visual Studio 2013\Projects\uhd_test\uhd_test\uhd_test.obj   uhd_test

Error   1   error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall uhd::device_addr_t::device_addr_t(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (__imp_??0device_addr_t@uhd@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function _main   C:\Users\...\Documents\Visual Studio 2013\Projects\uhd_test\uhd_test\uhd_test.obj   uhd_test


Error   4   error LNK1120: 3 unresolved externals   C:\Users\...\Documents\Visual Studio 2013\Projects\uhd_test\Debug\uhd_test.exe  uhd_test

我之前在其他程序中遇到过这些错误,但我能够相对容易地解决它们;或者我会拼错一个关键的包含,或者模板类会出现问题。但是,在这种情况下,我似乎无法解决问题。

任何建设性的意见将不胜感激。

注意:除了定义库目录路径之外,我还明确添加了UHD库,并且收到了相同的错误。

2 个答案:

答案 0 :(得分:4)

我让你的榜样有效。这是我使用的软件版本,因为你在描述中没有提到太多:

  • Microsoft Visual Studio 2013
  • VS2013的VC ++ Redistributable Package(vcredist_x86)
  • UHD 003.007.002,VS2013,Win32
  • Boost 1.56,lib32-msvc-12.0二进制包

以下是您需要在VS2013应用程序中设置的项目配置属性:

C / C ++ - &gt; 一般 - &gt; 其他包含目录

  • C:\本地\ boost_1_56_0
  • C:\ Program Files(x86)\ uhd \ include

链接器 - &gt; 一般 - &gt; 其他图书馆目录

  • C:\本地\ boost_1_56_0 \ LIB32-MSVC-12.0
  • C:\ Program Files(x86)\ uhd \ lib

链接器 - &gt; 输入 - &gt; 其他相关性

  • uhd.lib

我认为最后一步是绊倒你,祝你好运!

答案 1 :(得分:0)

我完全遵循大卫格林所说的话,我最终得到了同样的错误。最终我发现我已经下载了64位UHD,但我使用的是Visual Studio 2013 Express,它是一个32位编译器。为Visual Studio 2013下载32位版本的UHD解决了这个问题。对于遇到此问题的其他人,请仔细检查编译器是否与您安装的UHD版本匹配。