无法在 MacOS 上编译调用 mallinfo() 的 C/C++ 代码

Unable to compile C/C++ code calling mallinfo() on MacOS

提问人:mabalenk 提问时间:7/8/2023 最后编辑:mabalenk 更新时间:7/13/2023 访问量:99

问:

我需要帮助在 MacOS 系统上使用 C 代码中的函数。尽管将 包含在我的源文件中,但我在使用 GNU gcc 版本 12.3.0 编译代码时遇到了以下错误:mallinfo<stdlib.h>

MPI/worker.C: In member function 'int64_t Worker::cmembytes1(uint64_t*)':
MPI/worker.C:181:19: error: aggregate 'Worker::cmembytes1(uint64_t*)::mallinfo minf' has incomplete type and cannot be defined
  181 |   struct mallinfo minf;
      |                   ^~~~
MPI/worker.C:182:19: error: invalid use of incomplete type 'struct Worker::cmembytes1(uint64_t*)::mallinfo'
  182 |   minf = mallinfo() ;
      |                   ^
MPI/worker.C:181:10: note: forward declaration of 'struct Worker::cmembytes1(uint64_t*)::mallinfo'
  181 |   struct mallinfo minf;
      |          ^~~~~~~~
make: *** [<builtin>: MPI/worker.o] Error 1

更新:我怀疑,我的大部分问题都来自混合原生 macOS 标头和 GNU 标头。当我包含macOS SDK以使用时,定义会发生冲突。mallinfo()

C++ C 马洛克

评论

2赞 Shawn 7/8/2023
那是C++,而不是C,顺便说一句。
0赞 mabalenk 7/10/2023
你能告诉我,是什么让你这么想吗?
1赞 Ted Lyngmo 7/10/2023
@mabalenk 因为 和 成员函数。你在 C 中看不到这一点。不过,它看起来也不完全像 C++。它可能是 Objective-C 还是其他 Apple 语言之一?我从未见过它们,所以我不确定。::
1赞 Ted Lyngmo 7/10/2023
我很确定,如果用 C 编译器编译,代码不会走得那么远。打印出实际的编译命令,它应该会告诉你。make
1赞 Ted Lyngmo 7/10/2023
好的,是 C++。“请注意,mpic++、mpicxx 和 mpiCC 都使用相同的选项调用相同的底层 C++ 编译器”

答:

1赞 Ted Lyngmo 7/8/2023 #1

struct mallinfo,如果它甚至存在于您的系统上,则在 中定义,因此添加:malloc.h

#include <malloc.h>

如果找不到该标头,则不能使用 .struct

商城信息

Gnulib 未修复的可移植性问题:

某些平台缺少此功能:macOS 11.1、FreeBSD 13.0、NetBSD 9.0、OpenBSD 6.7、Minix 3.1.8、IRIX 6.5、Solaris 11 2010-11、mingw、MSVC 14。

评论

0赞 mabalenk 7/8/2023
我可以在我的系统上找到它: ,但是一旦我包含它,编译器就会用 ./Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include/sys/malloc.herror: '__darwin_wctype_t' does not name a type; did you mean '__darwin_wchar_t'
1赞 Ted Lyngmo 7/8/2023
@mabalenk好的,这是问题的下一个层次,需要进一步调查。从这里开始:stackoverflow.com/a/61586097/7582247
0赞 mabalenk 7/10/2023
这似乎是矫枉过正,用一个错误换取几十个样式错误。我在想,也许有 MacOS 的类似物吗?mallinfo__darwin***mallinfo
1赞 Ted Lyngmo 7/10/2023
@mabalenk 您运行的是哪个 MacOS 版本?
1赞 Ted Lyngmo 7/10/2023
@mabalenk 哦,好的。这可能是解释,是的。太糟糕了,我没有解决方法:-(