2016-08-05 38 views
0
#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"); 

} 

有这样的错误:如何解决C程序中'未定义的引用'?

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”,但似乎我不能使用它们。

我不知道如何解决它。

+6

你需要*链接*正确的库? [检查参考](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379479(v = vs.85).aspx)。 –

+2

哪个库定义了这些函数?头文件是'winscard.h',但头文件只声明函数;它没有定义它们。某处有一个定义这些函数的库或DLL。你需要指定它。也许用选项'-L/path/to/scard/lib -lscard'来指定目录和库名称 - 我在猜测正确的名称,但是你需要知道正确的名称并使用它以及它的安装位置并使用它。 –

+0

明白了。非常感谢你, –

回答

0

包含一个头文件通常只是通知你的翻译单元(你在这种情况下程序)存在的某些事情,级别比可以被编译的代码,

要真正使用那些东西,你需要除了弄清楚它们的存在以外,还需要在可执行文件中实际包含它们的代码。

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

相关问题