2016-07-11 5 views
0

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

Прежде всего, я скомпилировал то же самое в Windows с помощью MSVS2015, где он работает без проблем. Однако, когда я скомпилирую его с помощью GCC 4.9.3 в Unix (Solaris 10), сеанс сбрасывается во второй раз, когда выполняется код, и мне удалось сузить его до более или менее точно, что это значит: копирование объектов Eigen :: MatrixXf.

очень простой пример, который делает его крах следующее:

void entry() 
{ 
    // Initialize matrix1 
    Eigen::MatrixXf test(3, 3); 

    // Fill it with 3x3 values. 
    test << 1, 2, 3, 4, 5, 6, 7, 8, 9; 

    // Initialize matrix2 
    Eigen::MatrixXf test2(3, 3); 

    // Copy 
    test2 = test; 
} 

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

мне удалось сузить аргументы в моем Makefile, но нет никакой разницы:

CC_FLAGS = -I$(INC) -fPIC 
LINK_FLAGS = -shared 

Я действительно из идей относительно того, что может быть причиной для этого, так что я надеясь, что кто-то сможет указать мне в правильном направлении. Я совершенно новичок в разработке Unix и не знаю, какой лучший способ отладить это было бы, поэтому помощь там тоже ценится.

Стоит отметить, что мне пришлось создать версию gcc, которая использовалась сама, поскольку для Solaris 10 (x86) не было официального бинарного файла, но ошибок не было, и это работает очень хорошо для всего, кроме этого.

Спасибо!

+0

Какая версия Eigen? –

+0

Извините, я забыл упомянуть об этом. Это последняя стабильная версия: 3.2.8. –

+1

Я не могу воспроизвести его с помощью gcc 4.9.2 на Ubuntu. Можете ли вы создать [MCVE]? –

ответ

0

Как ни странно, компиляция с оптимизацией (-O2/-O3) решила эту проблему.