特征/特征值:使用mingw-w64的部分太多

时间:2017-04-09 12:07:06

标签: eigen mingw-w64 eigenvalue eigenvector eigen3

我想基于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秒,但它在Ubuntu(gcc版本5.4.0,Ubuntu 16.04)上没有抱怨使用g ++而构建。

如果我尝试在Windows上使用mingw-w64(gcc版本6.2.0(x86_64-win32-seh-rev1,由MinGW-W64项目构建))编译它,编译器会说

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

所以我尝试添加编译器标志-Wa,-mbig-obj,如this stackoverflow问题中建议的那样。

启用标志mingw-w64编译示例,但我在1小时后链接期间取消了构建。我也尝试从Eigen's documentation编译示例。它需要大约3分钟,但完全使用mingw-w64构建。

由于构建时间较长,如果我想在实际应用中使用通用特征值求解器,则此解决方案不适用。

它认为这个问题与Eigen的模板结构有关,这导致单个源文件中的许多符号。看起来mingw对此不太满意。

有没有办法用mingw优化这种情况?

0 个答案:

没有答案