Собственные/собственные значения: слишком много разделов с mingw-w64

Я хочу скомпилировать следующий пример на основе общего решателя собственных значений Eigen (Eigen 3.3.3):

#include <iostream>
#include <Eigen/Eigenvalues>

int main()
{
    Eigen::Matrix4f A;
    A << -0.75, 0, -1.5, -1,
         -1.25, 0, -1.5, -1,
         -0.75, 0, -1,   -1,
         -0.25, 0, -1.5, -1;

    Eigen::Matrix4f G;
    G << 1, 0, 0, 0,
         0, 1, 0, 0,
         0, 0, 1, 0,
         0, 0, 0, 0;

    std::cout << "A = " << A << std::endl;
    std::cout << "G = " << G << std::endl;

    Eigen::GeneralizedEigenSolver<Eigen::Matrix4f> sol;

    sol.compute(A.transpose()*A, G); // compute generalized eigenvalues

    std::cout << "alphas = " << sol.alphas().transpose() << std::endl;
    std::cout << "betas = " << sol.betas().transpose() << std::endl;
    std::cout << "eigenvalues = " << sol.eigenvalues().transpose() << std::endl;
    std::cout << "eigenvectors = " << sol.eigenvectors() << std::endl;
}

Компиляция этого небольшого примера занимает 53 секунды, но он собирается без проблем с помощью g++ в Ubuntu (версия gcc 5.4.0, Ubuntu 16.04).

Если я попытаюсь скомпилировать его с помощью mingw-w64 (версия gcc 6.2.0 (x86_64-win32-seh-rev1, построен проект MinGW-W64)) в Windows, компилятор скажет

as.exe: main.o: too many sections (48774)
Assembler messages:
Fatal error: can't write main.o: File too big

поэтому я попытался добавить флаг компилятора -Wa,-mbig-obj, как это было предложено в этом вопросе о стеке.

С включенным флагом mingw-w64 компилирует пример, но я отменил сборку во время линковки через 1 час. Я также попытался скомпилировать пример из документации Eigen. Это занимает около 3 минут, но полностью собирается с помощью mingw-w64.

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

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

Есть ли способ оптимизировать эту ситуацию с помощью mingw?


person MannyC    schedule 09.04.2017    source источник