小编Han*_*ani的帖子

string3.h中__warn_memset_zero_len的定义在哪里

最近我将我的项目从 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 …

c linux linker gcc

5
推荐指数
1
解决办法
2599
查看次数

标签 统计

c ×1

gcc ×1

linker ×1

linux ×1