Saltar al contenido principal

Etiqueta: C

CGO con estructuras bitfield en C

Una de las cosas en las que trabajé en un proyecto previo (en golang) era sobre interactuar con una biblioteca en C la cual usaba estructuras bitfield, así que no solo era interactuar con código en C, sino también manipular bits para asegurarse de que los datos representados no se corrompieran entre las estructuras bitfield de C y las estructuras de go, en ambos sentidos. Esta entrada es un recordatorio para mi mismo sobre cómo se hizo, en caso de que lo olvide en el futuro (lo cual realmente significa que no sé si lo olvide en 2 ó 4 meses).

Visibilidad de simbolos GNU

Hoy aprendí sobre un detalle al compilar una biblioteca compartida. Quería ligar código contra una biblioteca que compilé con meson, pero seguía obteniendo errores al ligar, específicamente undefined reference to `func_name' # referencia indefinida a `func_name' Después de compilar la biblioteca manualmente e inspeccionar el objeto resultante con nm, la diferencia relevante fue a siguiente # creado con meson 0000000000001263 t func_name # compilada manuamente 0000000000001263 T func_name La diferencia es sobre la T siendo minúscula/mayúscula, como sugiere la página de manual de NM(1):

Generar código ensamblador con sintaxis Intel

WindoStyle Se abre la consola de comandos (Windows+R -> cmd) y se ajusta la ruta a algo como esto: set PATH=%PATH%;C:\Program Files (x86)\CodeBlocks\MinGW\bin\ Ahora ya es como un GNU/Linux, y ya se puede aplicar el arte :) Modo legendario Abre un terminal. Lo mismo para ambos Se teclea el siguiente comando: gcc -S -masm=intel <filename> donde <filename> es el nombre del archivo a compilar. Básciamente lo que dice el comando es que -S detiene el proceso de compilación en la etapa de ensamblado, generando un código en ensamblador (valga la ensamblundancia).

Fallece Denis Ritchie

Uno de los padres del lenguaje de programación C, así como colaborador en el desarrollo de sistemas operativos Multics y Unix ha fallecido este fin de semana pasado debido a una enfermedad contra la que luchó por un tiempo. Nacido en Bronxville, Nueva York en el año 1941, graduado en física y matemática aplicada en la universidad de Harvard. En 1967 se integra a los laboratorios Bell, donde su padre Alistair E.