特征值/特征值:带有mingw-w64的部分过多

问题描述 投票:6回答:1

我想基于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 stackoverflow问题中所建议的那样添加编译器标志this。>

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

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

似乎该问题与Eigen的模板结构有关,该模板结构在单个源文件中导致许多符号。看来mingw对此不太满意。

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

我想基于Eigen的一般特征值求解器(Eigen 3.3.3)编译以下示例:#include #include int main(){Eigen :: Matrix4f A; ...

eigen mingw-w64 eigenvalue eigenvector eigen3
1个回答
0
投票

您可以通过添加编译标志“ -flto -Wl,-allow-multiple-definition”,还可以添加“ -fuse-linker-plugin”。 “ -Wa,-mbig-obj”在x86 / 32bits架构(仅x64)上不起作用]

© www.soinside.com 2019 - 2024. All rights reserved.