当我编译并运行我的程序时,我得到了一个符号查找错误。我是这么做的:
$ gcc -o parts parts.c -lnettle
$ ./parts
$ ./parts: symbol lookup error: ./parts: undefined symbol: nettle_pbkdf2我的代码包括以下头文件:
#include <nettle/pbkdf2.h>
#include <nettle/hmac.h>
#include <pbkdf2-hmac-sha1.c>在gcc编译期间,我通过包含这两个包含的头文件的对象文件来解决我的问题。
$ gcc -o parts parts.c hmac.o pbkdf2.o -lnettle问题是,我不明白这是怎么回事,也不明白为什么会这样。为什么我必须包括.o文件而不仅仅是头文件以避免符号查找或未定义的引用错误?
发布于 2014-02-17 04:23:37
正如Tobias所提到的,头文件告诉编译器做了什么,对象文件告诉编译器是如何完成的。您可以看到对象文件是什么,但实际上它只是源文件的预编译版本。
确实,您实际上不是得到编译器错误,而是链接器错误。它知道如何编译源文件,但在获得其他对象文件之前,它无法将所有内容组合在一起。
https://stackoverflow.com/questions/21805136
复制相似问题