我一直在尝试运行一个代码,它需要一个名为
的库#include <mcheck.h>
显然这个库是 gnulib 的一部分:
http://man7.org/linux/man-pages/man3/mcheck.3.html https://www.gnu.org/software/gnulib/manual/html_node/mcheck_002eh.html http://en.wikipedia.org/wiki/Mtrace
所以我希望它在 gcc 中。所以我创建了一个简单的代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <mcheck.h>
int main()
{
printf("salam");
}
而且我在不同的环境中运行。在 Linux 中,它工作正常,但我无法使用我使用的任何技巧在 Windows 中制作。 Windows 中的 gcc 包含这个库吗?
这是使用 gcc 制作的图像。 gcc版本是: gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
这里是cygwin的失败,gcc版本:gcc version 4.9.2 (GCC)
使用内部 GNU gcc 编译器的失败代码块
Visual Studio 2012 失败:
MinGW 与 gcc 版本 4.8.1 失败:
最佳答案
这个 header 是特定于 GNU 的,在 Windows 上不存在。在 Windows 中实现其功能将很困难,因为这需要 Hook 到 visual studio 编译器附带的 malloc() 实现。
幸运的是,这并不重要。由于所有这些函数所做的都是一致性检查,您可以简单地将 stub 添加到您的项目中,它们什么都不做并且总是报告成功。
/* mcheck.h */
#ifndef __MCHECK_H
#define __MCHECK_H
enum mcheck_status
{
MCHECK_DISABLED, MCHECK_OK, MCHECK_FREE, MCHECK_HEAD, MCHECK_TAIL
};
int mcheck (void (*abortfunc)(enum mcheck_status mstatus));
int mcheck_pedantic (void (*abortfunc)(enum mcheck_status mstatus));
void mcheck_check_all ();
enum mcheck_status mprobe (void *ptr);
#endif
/* mcheck.c */
#include "mcheck.h"
int mcheck (void (*abortfunc)(enum mcheck_status mstatus))
{
return 0;
}
int mcheck_pedantic (void (*abortfunc)(enum mcheck_status mstatus))
{
return 0;
}
void mcheck_check_all ()
{
}
enum mcheck_status mprobe (void *ptr)
{
return MCHECK_OK;
}
关于c - mcheck.h 在 Windows 中缺失,但在 Linux 中不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28133219/