subliminales simbolos significado satanicos ropa para nasa marcas logos logo imprimir empresas chevrolet actual c++ gcc linker shared-libraries elf

c++ - simbolos - ¿Qué significa exactamente la advertencia sobre el símbolo oculto al que DSO hace referencia?



logos subliminales satanicos (1)

¿Qué es un DSO?

Un DSO es un objeto compartido dinámico , o menos formalmente una biblioteca compartida .

¿Qué es un símbolo oculto?

Un símbolo oculto es un símbolo (es decir, el nombre de la función o el objeto de datos) que se ha compilado con enlaces ocultos , por ejemplo, según la declaración (específica de GCC):

int x __attribute__ ((visibility ("hidden")));

Si x está definido en un DSO, el enlace dinámico no puede hacer referencia a él desde un DSO diferente. El enlazador puede ver x (no es static ), pero no está disponible para enlaces dinámicos . Documentacion here

¿Cómo puede ser referenciado, si está oculto?

No puede ser, que es sobre lo que te están advirtiendo. Por ejemplo, la advertencia de tiempo de enlace:

DSO hace referencia al símbolo oculto `stat ''en /usr/lib/libc_nonshared.a(stat.oS)

le está diciendo que un DSO en el enlace hace referencia a la stat del símbolo, y el vinculador puede ubicar una definición de stat en /usr/lib/libc_nonshared.a , pero (obviamente) esa definición no está en el DSO que la referencia y no puede ser referenciado desde ese DSO, porque está oculto.

Obtendrá este problema si el problema DSO no se ha creado correctamente para su uso como un DSO. Vea este ejemplo y siga los seguimientos para la solución.

Continuado por los seguimientos de OP

Si algún DSO ya hace referencia a un símbolo oculto, ¿por qué el problema está en el DSO?

El enlazador está diciendo:

El DSO X contiene una referencia al símbolo S Puedo encontrar una definición del símbolo S es otro módulo vinculado Y , pero esa definición no estará disponible para satisfacer la referencia en X dinámicamente (es decir, en tiempo de ejecución ) porque S tiene un enlace oculto en Y

Puedo confirmar que el problema viene con un objeto no compartido [pero] [pero] no oculto explícitamente esos símbolos en mi objeto no compartido.

Es posible que no haya marcado explícitamente ningún símbolo oculto en el objeto no compartido. Dependiendo de cómo se construyó, los símbolos pueden estar ocultos por defecto a menos que se marque explícitamente lo contrario .

Digamos que el objeto no compartido es libnonshared.a y el símbolo supuestamente oculto es foo . Correr:

objdump -t libnonshared.a

para obtener información sobre los símbolos en libnonshared.a . En la salida, busque la entrada para foo . ¿Contiene la etiqueta .hidden ? - p.ej

0000000000000000 g F .text 000000000000000b .hidden foo

Esta entrada dice que foo es un símbolo global (marcado con una g : es por eso que el enlazador puede verlo) pero está oculto para un enlace dinámico .

Si este resulta ser el caso, debes ir y arreglar la compilación de libnonshared.a para que no se oculte foo . Si no, entonces estoy perplejo.

Tengo un problema al vincular alguna biblioteca compartida con g ++. Me da una advertencia como:

hidden symbol XXX in YYY is referenced by DSO /usr/lib/...

He leído algunas preguntas relacionadas sobre problemas particulares, pero quiero entenderlo en su totalidad: qué significa esta advertencia y cuál es la causa:

  1. ¿Qué es DSO?
  2. ¿Qué es un símbolo oculto?
  3. ¿Cómo puede ser referenciado, si está oculto?