Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用musl libc的Alpine linux上的OpenCascade编译失败(mallinfo:具有初始值设定项,但类型错误不完整)_C++_Compilation_Alpine_Libc_Musl - Fatal编程技术网

C++ 使用musl libc的Alpine linux上的OpenCascade编译失败(mallinfo:具有初始值设定项,但类型错误不完整)

C++ 使用musl libc的Alpine linux上的OpenCascade编译失败(mallinfo:具有初始值设定项,但类型错误不完整),c++,compilation,alpine,libc,musl,C++,Compilation,Alpine,Libc,Musl,我正在尝试在Alpine Linux上用g++/gcc编译OpenCascade OCE。它在Ubuntu上构建得很好,但同样的项目在Apline上失败,出现以下错误: OSD_MemInfo.cxx: In member function 'void OSD_MemInfo::Update()': OSD_MemInfo.cxx:146:19: error: variable 'OSD_MemInfo::Update()::mallinfo aMI' has initializer but i

我正在尝试在Alpine Linux上用g++/gcc编译OpenCascade OCE。它在Ubuntu上构建得很好,但同样的项目在Apline上失败,出现以下错误:

OSD_MemInfo.cxx: In member function 'void OSD_MemInfo::Update()':
OSD_MemInfo.cxx:146:19: error: variable 'OSD_MemInfo::Update()::mallinfo aMI' has initializer but incomplete type
   struct mallinfo aMI = mallinfo();
                   ^~~
OSD_MemInfo.cxx:146:34: error: invalid use of incomplete type 'struct OSD_MemInfo::Update()::mallinfo'
   struct mallinfo aMI = mallinfo();
                                  ^
OSD_MemInfo.cxx:146:10: note: forward declaration of 'struct OSD_MemInfo::Update()::mallinfo'
   struct mallinfo aMI = mallinfo();
          ^~~~~~~~

我真的不明白为什么这对于Alpine而不是Ubuntu来说是一个错误,有人知道为什么或者有类似的问题吗?

作为参考,这是musl libc的问题,不包括mallinfo功能,因为它是GNU glibc的补充。要使OpenCascade构建在这样的系统上,可以对OCE 0.18.3中的第146-147行进行注释

// struct mallinfo aMI = mallinfo();
// myCounters[MemHeapUsage] = aMI.uordblks;
这导致简单地忽略内存堆的使用,这似乎是安全的,因为它只用于信息和统计

然而,还需要注释三行221-222、342-343、398,其中call-feenableexcept也仅在glibc中定义

// if (fFltExceptions)   
//   feenableexcept (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW);

在此之后,OpenCascade应该构建在Alpine linux上。

这看起来类似于。编译器似乎找不到应该在malloc.h中定义的struct mallinfo的定义。谢谢你的关注。很奇怪,如果编译器找不到malloc,因为其他东西在Alpine上也可以很好地编译。