我正在尝试在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却不是,任何人都知道为什么或遇到类似的问题吗?
// struct mallinfo aMI = mallinfo();
// myCounters[MemHeapUsage] = aMI.uordblks;
这将导致简单地忽略似乎是安全的内存堆使用,因为它仅用于信息和统计。
但是,还必须在src/OSD/OSD_signal.cxx中注释三行(221-222、342-343、398),它们调用feenableexcept(也仅在glibc中定义)] >>
此OpenCascade应在Alpine linux上构建。
// if (fFltExceptions) // feenableexcept (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW);