如何在GCC中规避“尝试使用中毒的malloc / calloc”错误?

JL2*_*210 6 c gcc musl

我正在使用跨Musl编译器(相同版本)构建本机musl编译器(GCC 8.3.0),但出现此错误:

In file included from /usr/local/x86_64-cros-linux-musl/include/pthread.h:30,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/x86_64-cros-linux-musl/bits/gthr-default.h:35,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/x86_64-cros-linux-musl/bits/gthr.h:148,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/ext/atomicity.h:35,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/bits/basic_string.h:39,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/string:52,
                 from ../../gcc-8.3.0/gcc/brig/brigfrontend/brig-to-generic.h:25,
                 from ../../gcc-8.3.0/gcc/brig/brig-lang.c:46:
/usr/local/x86_64-cros-linux-musl/include/sched.h:76:7: error: attempt to use poisoned "calloc"
 void *calloc(size_t, size_t);
       ^
/usr/local/x86_64-cros-linux-musl/include/sched.h:116:36: error: attempt to use poisoned "calloc"
 #define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n)))
                                    ^
Run Code Online (Sandbox Code Playgroud)

关于如何规避这一点的任何想法?

细节:

目标/主机三重: x86_64-linux-musl

音乐版本: 1.1.21

我在这里应用了musl补丁:http ://port70.net/~nsz/musl/gcc-8.2.0/

我已经在源目录中运行了此命令:

sed -e '/m64=/s/lib64/lib/' -i gcc/config/i386/t-linux64
Run Code Online (Sandbox Code Playgroud)

Jos*_*hua 4

因此,我将继续假设它#pragma poison calloc位于您的头文件中而不是系统头文件中。

推荐通用解决方案:使用前包含所有系统头#pragma poison;当有多个程序头时,这可能会变得很棘手,但确实需要这样做。

另一种方法是直接#pragma poison从源代码及其防护措施中删除并删除。