最近我将我的项目从 ubuntu 14.04 移到了 ubuntu 16.04。当我使用从 os 存储库安装的 gcc 4.8.5 编译我的项目时,遇到错误“未定义 __warn_memset_zero_len”。我从未在带有 gcc 4.8.4 的 ubuntu 14.04 上看到过这个错误。
__warn_memset_zero_len,在string3.h 中声明,从memset 中调用以警告程序员的错误。为了重现错误,我制作了以下示例代码并用gcc --save-temps test_mem.c -D_FORTIFY_SOURCE=1 -Wall -O1 -v -Wl,-v
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] = "almost every programmer should know memset!";
memset (str, 1, 0);
puts (str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码也仅在带有 gcc 4.8.4 的 ubuntu 14.04 中编译。所以,首先,我假设新的 libc 可能缺少 __warn_memset_zero_len 的定义。为了找出定义,我将 ubuntu 14.04 的旧 libc 与 ubuntu 16.04 的旧 libc 进行了比较。两个版本都没有它,只有 string3.h 中的函数声明。我错了。:<
作为下一步,我假设 gcc …