[C con Clase] Borland Turbo C++

Samuel Díaz García samueldg en arcoscom.com
Vie Feb 24 13:24:17 CET 2012


No te puedo profundizar mucho con la línea de comandos, ya que el tc lo 
usaba yo en mis años de universidad porque tenía un 8086 y en la 
facultad tenían un 386, por eso tuve que aprender cómo optimizar código 
y el tiempo de generación de binarios.

Yo te cuento un poco:
    1) Para usar las funciones necesitas el .H, ahora bien, la 
implementación de las mismas están en el .C. El .C se transformará en 
OBJ (objeto binario).
    2) Para montar el ejecutable se linkan todos los OBJ. Ahora bien, 
los LIB son un OBJ especial ya compilado que no hay que volver a compilar.

Por ello, para compilar tus .C basta tener los .H (las declaraciones de 
las cosas), ahora bien, para linkar necesitas o el OBJ o el LIB 
correspondiente a las declaraciones que haya en los .H que uses.

De esa forma el compilar lo que hace es transformar los .C en .OBJ y el 
linkar lo que hace es coger lo necesario de los OBJ y LIBs y montar el 
ejecutable (o el binario objetivo del proceso).

Lo que no sé es si con el TCC solo te compila o te invoca después al 
linker, el hecho es que por un lado tendrás que compilar los .C para 
montar los OBJ y después tendrás que coger todos los OBJ y los LIBS que 
necesites y linkarlos.

Lo del modelo de memoria te lo decía porque recuerdo que en la familia 
8086 se usaba direccionamiento segmentado (SEGMENTO:OFFSET) y el código 
que se generaba podía optimizarse atendiendo a cómo usar ese "modelo de 
memoria" (se establecen los modelos de memoria en los micros 8086 en 
función de la cantidad de memoria que tengas que direccionar dentro de 
tu programa), de forma que había una serie de OBJ's que había que 
enlazar con el enlazador (linkar cocn el linker) para que no hubiese 
problemas. Además tus OBJs los tienes que generar todos atendiendo al 
mismo modelo de memoria e incluso las LIB que uses tienen que ser las 
adecuadas para el mismo modelo de memoria.

Por eso los fabricantes suelen sacar los famosos SDK's y cosas así, para 
obviarnos a los programadores de tales cosas y por eso por aquí el 
personal puede que le suene a chino e-mails como este que yo te he escrito.

En resumen, ten claros los conceptos, indaga un poco en la wikipedia o 
en webs especializadas y  sigue preguntando lo que no entiendas e 
intenta siempre que las preguntas sean lo más concretas posible para que 
no salgan e-mails como este tan genéricos.

Salu2

Miguel Olave escribió:
> Ezequiel:
> 
>      Efectivamente el fabricante incluso me mandó el compilador (turbo 
> C++ version 1.01), e incluso tiene un IDE pero que no está muy refinado 
> por lo, mismo opté por intentarlo a "sangre" usando el tcc directamente.
> 
> Existe el programa tlink.exe en los binarios del compilador pero me 
> perdí al intentar ocuparlo. ¿Debo buscar los .obj para linkearlos o 
> puedo linkear las .lib? El problema es que hay me perdí rotundamente, 
> ¿algún ejemplo que como ejecutarlo?
> 
> Samuel:
> 
>      Lamentablemente, no están los .c por lo que no puedo agregarlos. 
>  ¿cómo se debe realizar ese linkeo? ¿se debería generar algún archivo 
> que mapee ese linkeo?
> 
> 
> Gracias por vuestra ayuda, me han ayudado a destrabarme.
> 
> 
> 
> 
> 
> 2012/2/23 Samuel Díaz García <samueldg en arcoscom.com 
> <mailto:samueldg en arcoscom.com>>
> 
>     Yo recuerdo varias cosas q podrian ayudar.
> 
>     Agregar el .c de la libreria para q compile y linke automaticamente.
> 
>     Linkar a mano el los objetos con los libs.
> 
>     Ojo con el direccionamiento segmentado. No recuerdo si los 186 lo
>     usaban.
> 
>     Ahi tienes trabajo para seguir jugando con el tc.
> 
>     Ah y no olvides q los lib tenian q ser compilados bajo l mismo
>     modelo de memoria para q la cosa funcione.
> 
>     Salu2
> 
>     El 23/02/2012 22:20, "Ezequiel Hernan Di Giorgi"
>     <hernan.digiorgi en gmail.com <mailto:hernan.digiorgi en gmail.com>> escribió:
> 
> 
> 
>         El 23 de febrero de 2012 15:42, Miguel Olave <molavec en gmail.com
>         <mailto:molavec en gmail.com>> escribió:
> 
>             Estimados, 
> 
>                   Debido a que el tiempo ya a pasado y se han creado
>             nuevos compiladores, es poca la información y la ayuda que
>             he podido conseguir acerca del Borland Turbo C++ v1.01, pero
>             sin duda alguno de Uds. que lleva años de juego pueden
>             desempolvar esos conocimientos que la experiencia les dio en
>             favor de otros.
> 
>                   El asunto es que necesito programar un sistema
>             embebido con  80186 y el dichoso Turbo C se empecina en
>             hacerme la vida difícil con la inclusión de librerías. Para
>             no complicarme con la interfaz gráfica, me propuse usar en
>             compilador de línea de comandos tcc.exe pero a pesar de que
>             incluyo las librerías me arroja errores.
> 
>             EL COMANDO (tal vez por aquí esté el problema):
>             *****************************************************************
>             tcc -1 -LD:\ICPLib\u7186EX -ID:\ICPLib\u7186EX HELLO.C
> 
>             RESULTADO:
>             *********************************************
>             D:\ICPProgs\7186\hello_c>tcc -1 -LD:\ICPLib\u7186EX
>             -ID:\ICPLib\u7186EX HELLO.C
>             Turbo C++ Version 1.01 Copyright (c) 1990 Borland International
>             hello.c:
>             Turbo Link Version 3.01 Copyright (c) 1987, 1990 Borland
>             International
>             Error: Undefined symbol _Print in module hello.c
>             Error: Undefined symbol _GetLibVersion in module hello.c
>             Error: Undefined symbol _Is7186e in module hello.c
>             Error: Undefined symbol _InitLib in module hello.c
> 
>             Available memory 346208
> 
>             CODIGO (no muy dificil. Imprime hola mundo pero con las
>             funciones de la librerías del dispositivo):
>             *****************************
>             #include <7186e.h>
> 
>             void main(void)
>             {
>                 int iType, iVer;
>                 InitLib();                //función librería añadida
>                 iType=Is7186e();    //función librería añadida
> 
>                 if(iType)
>                 {
>                      iVer=GetLibVersion();   //función librería añadida
>                      Print("Hello uPAC-7186EX! (Flash memory is %d
>             K)\r\n", iType);  //función librería añadida
>                      Print("Library version is %d.%02d\r\n", iVer>>8,
>             iVer&0xff)    //función librería añadida
>                  }
>                 else
>                 {
>                 Print("Hello PC!, this program is not run under
>             uPAC-7186EX.");  //función librería añadida
>                 }
>             }
>             ***********************
> 
> 
>             Cualquier ayuda será más que bienvenida.
> 
> 
>             _______________________________________________
>             Lista de correo Cconclase Cconclase en listas.conclase.net
>             <mailto:Cconclase en listas.conclase.net>
>             http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>             Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>             <http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
> 
> 
> 
>         Hola, mira toma con cuidado lo que dire, por que no se mucho del
>         tema. Pero dire lo poco que se.
> 
>         Segun tengo entendido cuando se programa con sistemas embebidos,
>         el fabricante te da el software para realizarlo, te da almenos
>         un compilador. No conosco ese modelo, ni me imagino el
>         frabricante, pero en el caso de pic, en la pagina te dan todas
>         las herramientas.
> 
>         En los errores los undefined reference se deben a que no basta
>         con que ponga #include<tuCabezera.h> ya que son los prototipos y
>         supongo que las funciones estan en binario, por lo que tienes
>         que hacer al compilar es decirle al linker que te linkee esa
>         libreria.
> 
>         Mi corta experiencia con borland fue terrible, era cualquier
>         cosa a mi gusto. Te recomiendo el gcc o para mi gusto el g++, si
>         es que puedes compilar un binario desde estos y mandarlo a ese
>         aparatito, pero no creo. Supongo que necesitas un compilador
>         especifico para eso, o eso me dice mi logica.
>         (Esto lo digo por si quieres grabar el software en el
>         aparatito), si es unicamente comunicacion supongo q vas bien.
> 
>         Cuestion... fijate el linqueado de las bibliotecas, por que el
>         problema es de linker, cuando dice undefined reference.
> 
>         Disculpa mi impresicion. Suerte
> 
>         _______________________________________________
>         Lista de correo Cconclase Cconclase en listas.conclase.net
>         <mailto:Cconclase en listas.conclase.net>
>         http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>         Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>         <http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
> 
> 
>     _______________________________________________
>     Lista de correo Cconclase Cconclase en listas.conclase.net
>     <mailto:Cconclase en listas.conclase.net>
>     http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>     Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>     <http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

-- 
    Samuel Díaz García
     Director Gerente
ArcosCom Wireless, S.L.U.

CIF: B11828068
c/ Romero Gago, 19
Arcos de la Frontera
11630 - Cadiz

http://www.arcoscom.com

mailto:samueldg en arcoscom.com
msn: samueldg en arcoscom.com

Móvil: 651 93 72 48
Tlfn.: 956 70 13 15
Fax:   956 70 34 83




Más información sobre la lista de distribución Cconclase