Russian Qt Forum
Ноябрь 23, 2024, 09:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Криво "собралась"  (Прочитано 2343 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Октябрь 16, 2014, 15:59 »

Добрый день

Крашится на первой строчке в main (INVOP_)
Код
C++ (Qt)
float val = std::numeric_limits<float>::infinity();

В asm виден вызов numeric_limits, но там мусор. Подозреваю что-то типа "libstdc++ вместо libstdc", но как это грамотно определить - ну и конечно вылечить?

Спасибо
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Октябрь 16, 2014, 19:08 »

Сделал др проект в котором все норм и сравнил link map файлы. В обоих случаях никакого внешнего вызова dylib/dll не происходит, тело ф-ции как бы всасывается (ну или "биндится") в тот объектный файл где был вызов (хотя и не инлайнится), иногда в master файл.

Беда в том что одна из либов компилируется с опцией -xAVX, т.е. с расширенным набором команд (для крутых машин). Mangled имя везде одинаковое, ну линкер и оставляет одну (c avx реализацией). Хмм... как же ему сказать что вызовы std разные?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Октябрь 17, 2014, 16:35 »

Помаленьку проясняется: баг компилятора. Попробовал поменять ф-ции вызывающие краш - ситуация меняется, и "калечных" вызовов std вроде немного. Тут пошел случай достойный пера Шекспира
Код
C++ (Qt)
// оригинал, крашится
__forceinline BBox& operator=( const BBox& other ) { lower = other.lower; upper = other.upper; return *this; }
 
    
Код
C++ (Qt)
// так все равно крашится
BBox& operator=( const BBox& other ) { lower = other.lower; upper = other.upper; return *this; }
 
    
Код
C++ (Qt)
// а так РАБОТАЕТ!!!
BBox& operator=( const BBox& other )
{
 lower = other.lower;
 upper = other.upper;
 return *this;
}
 
"Уссышься про любовь"  Злой
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.199 секунд. Запросов: 23.