LinuxParty
No hay paquetes de C Cod para Ubuntu, Fedora u openSUSE. Voy a construir desde el código fuente usando la versión 1.2.8 en un equipo de 64 bits con Fedora 9. Me encontré con un ligero tirón durante la compilación que se puede resolver mediante la adición de una opción para la posición independiente de código a su CFLAGS como se muestra a continuación. El código PIC tiene la ventaja de que puede ser cargado en distintos lugares de la memoria; lo que es útil para la compilación del código para las bibliotecas compartidas, ya que les permiten ser movidas cuando múltiples bibliotecas quieren la misma dirección.
$ tar xzvf /.../ccod-1.2.8.tar.gz
$ cd ./ccod-*/
$ ./configure
$ make
/usr/bin/ld: csp.o: relocation R_X86_64_32 against `a local symbol' can not be used
when making a shared object; recompile with -fPIC
csp.o: could not read symbols: Bad value
$ vi Makefile
PACKAG = ccod-1.2.8
LFLAGS = -shared -Wl,-soname,libcsp.so
CFLAGS = -O2 -fPIC
LIBSTA = *.a
$ make clean
$ make
$ sudo make install
Mi primer intento de utilizar ccod obtiene un segfault, como se muestra a continuación.
$ cat main1.c
#!/usr/bin/ccod
#pragma CCOD:script no
int main( int argc, char** argv )
{
printf("hi there ");
return 0;
}
$ chmod +x main1.c
$ ./main1.c
Segmentation fault
Excavando en esto, he encontrado que la función cksum() es la causa. Tras la experimentación, el siguiente cambio con el tamaño de la variable s parece solucionar la cuestión (o al menos ya no se estrelló).
$ gdb /usr/bin/ccodEn el ejemplo anterior he usado ccod de una forma que deja su código fuente más próximo a lo que sería un nivel normal de lo que es un archivo de C. Así de simple, para aquellos programas sencillos sólo necesitarás añadirles las dos líneas de código en el código fuente para que puedan ser utilizados con ccod. La mayoría de los ejemplos en el sitio Web de ccod, utilizan una mezcla entre la sintaxis de C y la de PHP. Por ejemplo, en el siguiente archivo, el aviso de que ya no hay una función main(), y que cualquier texto que se encuentra fuera del bloque
(gdb) r main1.c
...
(gdb) bt
#0 0x0000000000404554 in cksum (path=0x10f3390
"/home/ben/testing/ccod/hello-world.c") at ccod.c:1306
#1 0x000000000040441b in get_sourcesum () at ccod.c:1203
#2 0x0000000000409605 in main (in_argc=2, in_argv=0x7fff6008bcd8) at ccod.c:3398
(gdb) q
$ vi /home/ben/testing/ccod/hello-world.c
...
static unsigned long
cksum(const unsigned char *path)
{
// register unsigned long i, c, s = 0;
register unsigned long i, c = 0;
int s = 0;
...
... recompile and reinstall ccod ...
$ ./main1.c
hi there
$ cat ./main2.c
#!/usr/bin/ccod
hi there
<?
printf("and more ");
return 0;
?>
$ chmod +x ./main2.c
$ ./main2.c
hi there
and more
La invasora sintaxis funciona bien si usted desea utilizar ccod Web con la programación web de C Server Pages. La documentación de la página enumera una pequeña colección de funciones que hacen que la programación CGI con C Server Pages sea bastante "pasable". Las funciones que uno espera para la programación Web, tales como la manipulación de sesiones, cookies, formularios, acceso a las cadena de consulta, y la redirección, están disponibles como funciones normales de C Server Page.
En el primer ejemplo he utilizado #pragma CCOD:script para modificar la forma ccod manejará el archivo de C de origen. El proyecto prevé cerca de una docena de tales pragmas, lo que le permite especificar qué compilador utilizar, que banderas (flags) invocar al compilador; con que bibliotecas adicionales podrá vincular el programa, y unas pocas opciones específicas para el C Server Page.
Como ccod crea una caché como si fueran binarios compilados, su código fuente no es compilado cada vez que lo ejecuta. Por supuesto, que mi pequeña función cksum no está completamente probada y puede romper la memoria caché. El problema parece ser que es la variable s que devolvía valores que eran demasiado grandes, por lo que se cambió el tipo de datos.
Si usted tiene un código en C o C++ y desea exponer parte de su funcionalidad a la web de prototipos, C Cod podría ser sólo el billete. Por la simplicidad de su código, compilar, ejecutar ciclos de prueba C Cod le puede ayudar a evitar siempre tener que crear makefiles o preocuparse por el proceso de compilación en absoluto.
Ben Martin ha estado trabajando en sistemas de ficheros más de 10 años. . Completó su doctorado y ahora ofrece servicios de consultoría, se centró en libferris, sistemas de archivos, y buscar soluciones.
Fuente: Linux.com, traducción Linux-Party.com
-
Programación
- Thomas E. Kurtz, coinventor de BASIC, muere a los 96 años
- Profesor de informática del MIT prueba el impacto de la IA en la formación de programadores
- Lanzamiento del IDE de código abierto Qt Creator 14 con soporte para complementos basados en Lua
- Plantillas para Joomla - Episodio 1: Plantillas, marcos y clubes o no...
- Este es el mejor libro que he visto para aprender a programar en Python en castellano desde cero, gratis y online
- ¿Deberían los niños seguir aprendiendo a programar en la era de la IA?
- La 'obsolescencia' de VBScript confirmada por Microsoft y su eventual eliminación de Windows
- El Gran Debate: ¿Deberían los Modelos de Inteligencia Artificial Ser de Código Abierto?
- El lenguaje de programación BASIC cumple 60 años
- El CEO de Nvidia dice que los niños no deberían aprender a programar
- 40 años de Turbo Pascal: recuerdos del dinosaurio codificador que revolucionó los IDE
- Los lenguajes de programación más populares y dónde aprenderlos.
- Top 5 de los principales lenguajes de programación para desarrollar aplicaciones de escritorio Linux
- Qt Creator 12 lanzado con complementos de grabación de pantalla y Explorador de compiladores
- 10 sitios web para practicar problemas de programación