#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/