[C con Clase] Borland Turbo C++
Miguel Olave
molavec en gmail.com
Vie Feb 24 15:27:42 CET 2012
Samuel,
Muchas gracias por tu tiempo. Voy a darme una tarde completa para
investigar al respecto y matar varias opciones más, ya que creo que el
Turbo C utiliza lo archivos de proyecto .mpj para realizar este llinkeo,
por lo que voy a darle más vueltas a su IDE en DOS, ya que si se ejecuta
tc.exe aparacere este IDE.
Gracias nuevamente.
2012/2/24 Samuel Díaz García <samueldg en arcoscom.com>
> 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
>
>
> _______________________________________________
> 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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120224/fa042bc9/attachment.html>
Más información sobre la lista de distribución Cconclase