es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El enlazador se bloquea al compilar un programa sencillo de eigen3 en Win10.

Estoy utilizando las herramientas de compilación proporcionadas por Rtools.

Versión de gcc: 8.3.0 x86_64-w64-mingw32 (Compilado por Jeronen para Proyecto R).

Versión de GNU ld: 2.33.1.

Versión de eigen: 3.4.0.

He estado probando varias funciones del paquete eigen y, al calcular los valores singulares utilizando el objeto “BDCSVD”, el enlazador se queda colgado y utiliza toda la CPU. La siguiente línea de código es la que está causando el problema:

BDCSVD<matrixxd> svd(m, ComputeThinU | ComputeThinV);

Esta línea de código se compila correctamente. Solo el enlazador en particular no finaliza. He esperado unos minutos al enlazador, pero simplemente no finaliza.

Por otro lado, cuando utilizo la última versión de “gcc” de Windows Linux subsystem, todo funciona bien. ¿Es este un problema conocido? ¿Se puede solucionar fácilmente (pero aún utilizando el sistema de compilación proporcionado por Rtools en Windows)?

PD: He encontrado este problema varias veces antes, pero los archivos de cpp eran mucho más complejos, así que no estaba seguro en ese momento de qué era lo que hacía que el enlazador se quedara colgado.

Actualización:
A continuación se proporciona un ejemplo de código. Configuré mi copia de Windows de eigen3 utilizando la opción “Unix Makefiles”, ya que no tengo Visual Studio y no quiero descargarlo.

Aquí está el archivo cpp:

#include <iostream>
#include <eigen dense="">

using namespace std;
using namespace Eigen;

int main()
{
    double data[9];
    for (int i = 0; i < 9; i++)
    {
        data[i] = i;
    }

    Map<matrixxd> m(data, 3, 3);
    BDCSVD<matrixxd> svd(m, ComputeThinU | ComputeThinV);

    auto v = svd.singularValues();

    cout << "condition #: " << v.maxCoeff() / v.minCoeff() << endl;
}

Compilado usando la línea de comandos:

g++ -I"mi biblioteca eigen" t.cpp -o t.exe

donde “g++” proviene de Rtools, “mi biblioteca eigen” es el directorio de inclusión de eigen, “t.cpp” es el archivo cpp y “t.exe” es el objetivo de compilación.

Sorprendentemente o no, cuando cambié el algoritmo de “BDCSVD” a “JacobSVD”, la compilación tenía éxito, a pesar de que “BDCSVD” tiene como predeterminado “JacobSVD” para matrices pequeñas.

“cc1plus” y “as” retornaron normalmente. “ld” parece estar ejecutándose indefinidamente.

Ediciones:
Ha pasado un tiempo, pero todavía estoy buscando una respuesta.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Según la información proporcionada, parece que el problema está con el enlazador proporcionado por Rtools, ya que el uso de una versión diferente de gcc desde el subsistema de Linux de Windows resolvió el problema. Es posible que haya un problema de compatibilidad entre el enlazador y el paquete eigen.

    Una solución potencial podría ser intentar actualizar Rtools para ver si una versión más reciente resuelve el problema. También podría valer la pena comunicarse con la comunidad de Rtools o la comunidad de eigen para obtener más ayuda en la solución de problemas.

    En cuanto al ejemplo de código proporcionado, es difícil determinar exactamente qué puede estar causando que el enlazador se quede colgado. Sin embargo, podría valer la pena verificar si hay algún error o error potencial en el código que podría estar causando que el enlazador se quede atascado.

Comments are closed.