当我包含" 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.
答案 0 :(得分:2)
您包含的头文件仅包含该函数的声明,实际函数 definition (实现)在实际的库中 (通常是一个名为(使用您的示例)libkrb5.a
或libkrb5.so
)的文件。
传递给链接器的选项是-l
(小写L),它告诉链接器查找并使用您传递的任何库作为-l
选项的参数。
如果你自己创建了包含多个源文件的程序,那么这真的不应该是一个惊喜。如果您有两个源文件a.c
和b.c
,则在a.c
中调用b.c
中定义的函数,您需要声明函数它可以在a.c
中找到。然后,当您链接可执行程序时,您需要链接到b.c
创建的目标文件,以便能够找到定义。
使用库并没有太大的不同。