Ошибка компиляции OpenCascade в Alpine linux с musl libc (mallinfo: есть инициализатор, но ошибка неполного типа) - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь скомпилировать OpenCascade (OCE) с g ++ / gcc на Alpine Linux. Он прекрасно работает на 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, есть ли у кого-нибудь идеи, почему или имеетбыли похожие проблемы?

1 Ответ

0 голосов
/ 27 октября 2019

Для справки, это проблема musl libc, не включающая функциональность mallinfo , так как это дополнение GNU glibc. Чтобы сделать сборку OpenCascade такой, как система, можно закомментировать строки 146-147 в src / OSD / OSD_MemInfo.cxx (для OCE 0.18.3).

// struct mallinfo aMI = mallinfo();
// myCounters[MemHeapUsage] = aMI.uordblks;

Это приводит к простомуигнорирование использования кучи памяти, которое кажется безопасным, поскольку оно используется только для информации и статистики.

Однако необходимо также прокомментировать три строки (221-222, 342-343, 398) в src / OSD / OSD_signal.cxx , который вызывает feenableexcept (также определено только в glibc)

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

После этого OpenCascade должен опираться на Alpine linux.

...