c - 如何解决C程序中的 'undefined reference to'?

标签 c

#include <stdio.h>
#include <stdlib.h>
#include <winscard.h>
#include <wintypes.h>

int main(void){

    SCARDCONTEXT hContext;
    SCARDHANDLE hCard;
    DWORD dwActiveProtocol;
    LONG rv;

    rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM,NULL,NULL,&hContext);
    rv = SCardConnect(hContext,"Reader X", SCARD_SHARE_SHARED,
            SCARD_PROTOCOL_T0, &hCard, &dwActiveProtocol);

    printf("Hello world!\n");

}

有这样的错误:

test.c:(.text+0x2e): undefined reference to `SCardEstablishContext'
test.c:(.text+0x5b): undefined reference to `SCardConnect'
xcollect2: error: ld returned 1 exit status

这些函数包含在“winscard.h”中,但似乎我无法使用它们。

不知道怎么解决。

最佳答案

包含头文件通常只是通知您的翻译单元(在本例中为您的程序)某些内容存在,以便可以编译代码,

要真正使用这些东西,您需要做的不仅仅是弄清楚它们是否存在,您还需要将它们的代码实际合并到可执行文件中。

这通常是链接阶段的责任,并且根据Microsoft documentation ,这些函数的代码可以在 winscard.lib/.dll 中找到。您需要修改您的项目,以便将这些库包含在您的构建中。

关于c - 如何解决C程序中的 'undefined reference to'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38780321/

相关文章:

c - 逐字反转字符串

c - 传递 char* 作为参数会破坏程序,而 char[] 不会

c - 使用 while 循环进行验证,如何使其看起来像错误

可以修改 C 中的字符串文字吗?

c++ - 解析(浮点)数字时使用什么信息?

c - 防止控制台窗口在 C 中调整大小/滚动 (Window.h)

c - 奇怪的 float 四舍五入

c - 有没有办法使用 08 和 09 并消除八进制常量错误中的无效数字 "8"?

cprinting Ascii 使用整数赋值给 char

c - 是否可以将套接字绑定(bind)到 c 中的 2 个地址?