首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在编译时我需要包括.o文件?

为什么在编译时我需要包括.o文件?
EN

Stack Overflow用户
提问于 2014-02-15 23:30:48
回答 1查看 2.9K关注 0票数 2

当我编译并运行我的程序时,我得到了一个符号查找错误。我是这么做的:

代码语言:javascript
复制
$ gcc -o parts parts.c -lnettle
$ ./parts
$ ./parts: symbol lookup error: ./parts: undefined symbol: nettle_pbkdf2

我的代码包括以下头文件:

代码语言:javascript
复制
#include <nettle/pbkdf2.h>
#include <nettle/hmac.h>
#include <pbkdf2-hmac-sha1.c>

在gcc编译期间,我通过包含这两个包含的头文件的对象文件来解决我的问题。

代码语言:javascript
复制
$ gcc -o parts parts.c hmac.o pbkdf2.o -lnettle

问题是,我不明白这是怎么回事,也不明白为什么会这样。为什么我必须包括.o文件而不仅仅是头文件以避免符号查找或未定义的引用错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-17 04:23:37

正如Tobias所提到的,头文件告诉编译器做了什么,对象文件告诉编译器是如何完成的。您可以看到对象文件是什么,但实际上它只是源文件的预编译版本。

确实,您实际上不是得到编译器错误,而是链接器错误。它知道如何编译源文件,但在获得其他对象文件之前,它无法将所有内容组合在一起。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21805136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档