【问题标题】:Visual Studio 2010 C++ - Unresolved external symbolVisual Studio 2010 C++ - 未解析的外部符号
【发布时间】:2013-05-10 16:36:41
【问题描述】:

我正在尝试使用库 HID API 进行一些 USB 编程。以下是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <hidapi.h>


int main(int argc, char* argv[])
{
    int res;
    unsigned char buf[65];
#define MAX_STR 255
    wchar_t wstr[MAX_STR];
    hid_device *handle;
    int i;

    // Enumerate and print the HID devices on the system
    struct hid_device_info *devs, *cur_dev;

    devs = hid_enumerate(0x0, 0x0);
    cur_dev = devs; 
    while (cur_dev) {
        printf("Device Found\n  type: %04hx %04hx\n  path: %s\n  serial_number: %ls",
            cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number);
        printf("\n");
        printf("  Manufacturer: %ls\n", cur_dev->manufacturer_string);
        printf("  Product:      %ls\n", cur_dev->product_string);
        printf("\n");
        cur_dev = cur_dev->next;
    }
    hid_free_enumeration(devs);

}

我在Project properties-&gt;Configuration Properties-&gt;VC++ Directories-&gt;Include Directories中添加了以下内容

C:\Users\yohan\Documents\HIDApi\windows
C:\Users\yohan\Documents\HIDApi\hidapi
C:\Users\yohan\Documents\HIDApi\libusb

当我运行我的代码时,我收到以下错误

Error   6   error LNK2019: unresolved external symbol _hid_free_enumeration referenced in function _main    c:\Users\yohan\documents\visual studio 2010\Projects\USB_Test\USB_Test\FirstTest.obj    USB_Test
Error   7   error LNK2019: unresolved external symbol _hid_enumerate referenced in function _main   c:\Users\yohan\documents\visual studio 2010\Projects\USB_Test\USB_Test\FirstTest.obj    USB_Test
Error   8   error LNK1120: 2 unresolved externals   c:\users\yohan\documents\visual studio 2010\Projects\USB_Test\Debug\USB_Test.exe    USB_Test

为什么我会收到此错误?我正在使用 Visual Studio 2010 专业版。

【问题讨论】:

  • 您是否构建了 API?
  • @Oscee:我确实构建了 windows 文件夹中的内容。我打开 .sln 并选择构建

标签: c++ visual-studio-2010 usb


【解决方案1】:

您已包含标头,因此编译器知道所有符号声明(函数等)。但是,链接器需要将您对这些符号的使用链接到它们的实际定义——它找不到它们(因此出现错误)。

这可能是由多种原因引起的,但在您的情况下,您似乎还没有构建库,或者如果您已经构建了库(或者您有预构建的版本),那么您还没有链接它in(这就是库路径目录的用途——您需要 add the .lib file as input to the linker,添加它将搜索该 .lib 的库路径)。

另一种链接 .lib 文件的方法是通过特定于编译器的(在这种情况下仅限 MSVC)#pragma 指令:

#pragma comment(lib, "thelibrary.lib")

【讨论】:

  • 感谢您的回复。不幸的是,没有库。如果您不介意,可以请您下载并检查吗?它只有 1MB
  • @Knight:由于没有捆绑.lib,您需要构建项目才能获得一个。您可以选择静态构建它(生成一个包含所有已编译代码的 .lib 文件,该文件链接到您的代码中,最后留下一个二进制文件),或者将其构建为 DLL(这可能是默认设置) ),它将创建一个 .dll(在运行时需要)和一个 .lib(它告诉链接器它需要知道的关于链接到 DLL 的所有信息)。无论哪种方式,您最终都会为您的平台创建一个 .lib。如果您需要更多帮助,请告诉我!
  • 谢谢!非常感谢您的帮助!
【解决方案2】:

我必须将他们完整的可视化 C++ 项目包含到我的项目中。然后问题就解决了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2014-07-28
    相关资源
    最近更新 更多