2010-01-18 11 views

Respuesta

8

La vinculación tardía no es realmente una función del lenguaje C en sí, más algo que su entorno de ejecución le brinda.

Muchos sistemas proporcionarán enlace diferido como una característica del vinculador/cargador y también puede utilizar llamadas explícitas como dlopen (para abrir una biblioteca compartida) y dlsym (para obtener la dirección de un símbolo dentro de esa biblioteca para que puede acceder o llamarlo).

La única forma semi-portátil de obtener vinculante tarde con el estándar C sería usar algún truco con system() e incluso eso es al menos parcialmente específico de la implementación.

Si no está hablando tanto de enlaces diferidos sino de polimorfismo, puede lograr ese efecto con los punteros de función. Básicamente, crea un struct que tiene todos los datos para un tipo junto con punteros de función para ubicar los métodos para ese tipo. Luego, en el "constructor" (normalmente una función init()), configura los punteros a las funciones relevantes para ese tipo.

Aún necesita incluir todo el código, incluso si no lo usa, pero es posible para obtener el polimorfismo de esa manera.

1

¿Cómo se puede lograr el encuadernado tardío en lenguaje C?

Lo más cerca que sería a través de la carga dinámica de biblioteca (DLL) como con dlopen & dlsym en Linux. De lo contrario, no está disponible directamente en C.

3

El enlace de símbolos en C siempre se realiza en tiempo de compilación, nunca en tiempo de ejecución.

Biblioteca de unión o enlace dinámico como se le llama, se realiza a través de dlopen() y dlsym() en * nix, y LoadLibrary() y GetProcAddress() en Windows.

1

Utilice Objective-C o Lua. Ambos son lenguajes de enlace tardío que pueden interactuar fácilmente con C.

Por supuesto, usted podría implementar su propio esquema de resolución de nombres, pero ¿por qué reinventar la rueda?

1

Desafortunadamente no especificó un SO. Para Unix, puede usar bibliotecas compartidas o crear una estructura de módulo configurable (complemento). Para más detalles, puede encontrar útil el código fuente de un servidor web apache 1.3. http://httpd.apache.org/download.cgi

0

cppdev parece ser el único en dar en el clavo con su comentario. Por favor, eche un vistazo a the definition itself. En pocas palabras:

Enlace tardío, o de enlace dinámico, es un mecanismo de programación informática en el que el método se llama a un objeto es buscado por su nombre en tiempo de ejecución.

Todas las demás respuestas solo omiten el punto principal, es decir, "buscar por nombre".

La solución necesaria sería muy similar a una tabla de búsqueda de punteros a funciones junto con una o dos funciones para seleccionar la correcta por su nombre (o incluso por firma). Lo llamamos una "tabla hash".

Cuestiones relacionadas