gpt4 book ai didi

c - 为什么crc32值需要-lz

转载 作者:太空宇宙 更新时间:2023-11-04 08:25:00 24 4
gpt4 key购买 nike

我正在使用 crc32(initial_crc_value,data,data_length); 生成一个 crc32 值。如果我没有在链接器选项中使用 -lz,我将收到链接器错误

"undefined reference to crc32".

我没有包含任何 zlib.h。那么,在哪个头文件中声明了crc32()呢?为什么链接器选项 -lz 足以编译?

最佳答案

首先,crc32() 函数在zlib.h 中声明(原型(prototype)化)并在zlib 中定义。图书馆。因此,要使用 crc32(),您需要包含 header 和与库的链接。

现在,回答您的问题,

1. if I am not using -lz in linker options, I am getting linker error

是的,因为在链接时,如果不链接到包含函数定义的 zlib 库,编译器将无法找到 crc32() 函数定义。

2. why linker option -lz is sufficient to compile?

说实话,这还不够,应该会产生错误。但是,您的代码在没有头文件的情况下可以(编译),这是因为编译器支持函数的隐式声明(遗憾的是,仍然)。如果您启用适当的警告,您的编译器至少会就此问题发出警告。


关于函数的“隐式声明”,情况是,如果编译器遇到一个它还没有看到原型(prototype)的函数调用(在换句话说,没有关于函数定义的信息),它假定函数定义为返回类型 int 并接受任意数量的参数。您可以在 related answer 上阅读更多相关信息

关于c - 为什么crc32值需要-lz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30974811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com