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.

Forzar el enlace de una biblioteca estática explícitamente instanciada.

Tengo una clase sin cabecera plantilla A.hpp:

“`

#ifndef A_HPP
#define A_HPP

template<int n="">
class A
{
A() {}
};

#endif

También tengo una instancia explícita en un archivo A.cpp correspondiente:

#include "A.hpp"

template class A<2>;

Compilé la biblioteca a un objeto y la convertí al formato de biblioteca estática:
g++ -c A.cpp -I ./
ar rvs libA.a A.o

Edición: al agregar un constructor, pude obtener símbolos del archivo objeto:
nm A.a

A.o:
0000000000000000 W _ZN1AILi2EEC1Ev
0000000000000000 W _ZN1AILi2EEC2Ev
0000000000000000 n _ZN1AILi2EEC5Ev

Luego, cuando compilé un archivo main.cpp:

#include "A.hpp"

int main()
{
A<2> foo();
}

¿Sigo teniendo que incluir el archivo de cabecera A.hpp? ¿Cómo determino si se está usando la biblioteca estática? “`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para determinar si se está utilizando la biblioteca estática, se puede usar el comando “nm” en el archivo ejecutable compilado generado a partir del archivo main.cpp y comprobar si los símbolos definidos en el archivo A.hpp están presentes. Si los símbolos están presentes, significa que la biblioteca estática ha sido enlazada al ejecutable y está siendo utilizada.

    Por ejemplo, se puede ejecutar el siguiente comando:

    nm a.out
    

    Esto mostrará todos los símbolos presentes en el archivo ejecutable. Si ve los símbolos definidos en A.hpp, significa que se está utilizando la biblioteca estática.

    Alternativamente, también se puede utilizar el comando “ldd” para comprobar las dependencias del archivo ejecutable. Si la biblioteca estática se está enlazando, se verá listada en la salida del comando “ldd”.

    ldd a.out
    

    Ambos comandos pueden ayudar a determinar si se está utilizando la biblioteca estática en el archivo ejecutable compilado.

Comments are closed.