[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