C++ 使用musl libc的Alpine linux上的OpenCascade编译失败(mallinfo:具有初始值设定项,但类型错误不完整)
我正在尝试在Alpine Linux上用g++/gcc编译OpenCascade OCE。它在Ubuntu上构建得很好,但同样的项目在Apline上失败,出现以下错误: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
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上也可以很好地编译。