[devel] rpm-macros-cmake vs qt vs gcc vs eiskaltdcpp-qt = segfault?

Ivan A. Melnikov iv на altlinux.org
Вс Дек 5 08:58:03 UTC 2010


Здравствуйте.

Тут такая история...

Начал падать eiskaltdcpp-qt. Пошёл разбираться, и нашёл, что
это воспроизводится

http://code.google.com/p/eiskaltdc/issues/detail?id=601

Оказалось, что у нас в /usr/lib/rpm/macros.d/cmake есть такие строки:

[...]
cmake .. \\\
    -DCMAKE_SKIP_RPATH:BOOL=yes \\\
    -DCMAKE_BUILD_TYPE=MinSizeRel \\\
    -DCMAKE_C_FLAGS:STRING='%optflags' \\\
    -DCMAKE_CXX_FLAGS:STRING='%optflags' \\\
[...]

Из-за такого BUILD TYPE к аргументам gcc добавляются
CMAKE_C_FLAGS_MINSIZEREL, содержащие -Os, но добавляются *после*
CMAKE_C_FLAGS. Получается, -O2 из %optflags игнорируется и eiskaltdcpp
собирается с -Os.

Почему-то это приводит к segfault'ам. По ссылке выше пишут, что нужно
собирать с теми же флагами, с какими была собрана qt. Я руками раскрыл
%cmake в спеке, удалил строку про BUILD_TYPE и пересобрал пакет -- всё
заработало.

Получается, что:

* стоит собирать все приложения с Qt с теми же флагами, с которыми была
  собрана Qt -- вообще, типичная ситуация для C++, но то, что флаги
  оптимизации влияют на ABI, имхо, проблема;

* наш %cmake частично игнорирует %optflags, что плохо, наверное повесить
  надо.

-- 
WBR,
Ivan A. Melnikov


Подробная информация о списке рассылки Devel