当我们包含" krb5.h&#34 ;?为什么krb5功能无法解决?

时间:2017-03-10 08:59:01

标签: c gcc

当我包含" stdio.h"并尝试使用" printf"它工作正常。 当我使用" krb5.h"时,它的功能" krb5_get_init_creds_password"没有自己解决。

面临的错误: bash-4.1 $ gcc krb.c krb.c:在函数'main'中: krb.c:6:警告:内置函数'printf'的隐式声明不兼容 /tmp/ccTK4DJM.o:在函数main': krb.c:(.text+0x53): undefined reference to krb5_get_init_creds_password' collect2:ld返回1退出状态

我必须使用-lkrb5进行编译才能解决问题。

有人能让我知道为什么我需要使用gcc选项" -lkrb5"让krb5功能得到解决? 我正在使用C.

1 个答案:

答案 0 :(得分:2)

您包含的头文件仅包含该函数的声明,实际函数 definition (实现)在实际的库中 (通常是一个名为(使用您的示例)libkrb5.alibkrb5.so)的文件。

传递给链接器的选项是-l(小写L),它告诉链接器查找并使用您传递的任何库作为-l选项的参数。

如果你自己创建了包含多个源文件的程序,那么这真的不应该是一个惊喜。如果您有两个源文件a.cb.c,则在a.c中调用b.c中定义的函数,您需要声明函数它可以在a.c中找到。然后,当您链接可执行程序时,您需要链接到b.c创建的目标文件,以便能够找到定义。

使用库并没有太大的不同。