我正在使用crc32(initial_crc_value,data,data_length);
生成crc32值。如果我没有在链接器选项中使用-lz
,那么我会收到链接器错误信息:
"未定义的参考 crc32"。
我没有包含任何zlib.h
头文件。所以,在哪个头文件中声明了crc32()
?为什么使用链接器选项-lz
就足够编译呢?
我正在使用crc32(initial_crc_value,data,data_length);
生成crc32值。如果我没有在链接器选项中使用-lz
,那么我会收到链接器错误信息:
"未定义的参考 crc32"。
我没有包含任何zlib.h
头文件。所以,在哪个头文件中声明了crc32()
?为什么使用链接器选项-lz
就足够编译呢?
crc32()
函数在zlib.h
中声明(原型),并在zlib
库中定义。因此,要使用crc32()
函数,您需要包含头文件并链接库。是的,因为在链接时,编译器将无法找到1. 如果我没有在链接器选项中使用
-lz
,我会得到链接器错误
crc32()
函数定义而不链接zlib
库,该库包含函数定义。
说实话,这还不足够,并且应该产生错误。但是,您的代码可以(编译)正常工作,是因为编译器依旧支持隐式声明函数。如果您启用适当的警告,编译器至少会警告您此问题。2. 为什么链接器选项
-lz
就足以编译?
int
并接受任意数量的参数。您可以在相关答案上阅读更多信息。
crc32
,那么你无法编译。你必须要有一个实现它的库,这个库在libz.so中。 - Eregrith