Man*_*nyC 5 eigenvalue eigenvector eigen mingw-w64 eigen3
我想基于本征的一般特征值求解器(本征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;
}
Run Code Online (Sandbox Code Playgroud)
编译这个小例子需要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
Run Code Online (Sandbox Code Playgroud)
因此,我尝试-Wa,-mbig-obj按照此 stackoverflow问题中的建议添加编译器标志。
启用标记后,mingw-w64会编译示例,但是我在1小时后的链接期间取消了构建。我还尝试从Eigen的文档中编译示例。它大约需要3分钟,但是完全可以使用mingw-w64构建。
由于构建时间长,因此如果我想在实际应用程序中使用通用特征值求解器,则此解决方案不适用。
似乎该问题与Eigen的模板结构有关,该模板结构在单个源文件中导致许多符号。看来mingw对此不太满意。
有没有办法用mingw优化这种情况?