Hello World mit bcc 3.1 und tlink
-
4.2) linking fails, because "segment _TEXT exceeds 64K". You are using too small a model under DOS. The LARGE model allows any size data/text. Change your compilers options.
aus
http://vl.fmnet.info/precc/faq.html
bist du wirklich unter dos? (nur zur sicherheit nachgefragt)
-
woher hast du übrigens diesen tlink aufruf?
was ist "maths.lib" ..hier meine optionen von tlink:
E:\nasm>tlink Turbo Link Version 2.0 Copyright (c) 1987, 1988 Borland International Syntax: TLINK objfiles, exefile, mapfile, libfiles @xxxx indicates use response file xxxx Options: /m = map file with publics /x = no map file at all /i = initialize all segments /l = include source line numbers /s = detailed map of segments /n = no default libraries /d = warn if duplicate symbols in libraries /c = lower case significant in symbols /3 = enable 32-bit processing /v = include full symbolic debug information /e = ignore Extended Dictionary /t = create COM file
und hier ein example makefile (zwar win, aber zur ansicht)
The Example Makefile project.exe : main.obj io.obj tlink c0s main.obj io.obj, project.exe,, cs /Lf:\bc\lib main.obj : main.c bcc –ms –c main.c io.obj : io.c bcc –ms –c io.c
ps: übrigens sehe ich kein tlink -c, tlink arbeitet mit /
-
@volkard
Ich verwende BCC 3.1 und Tlink 5.1 (mit 2.0 von elise könnte es aber auch gehen).
Die Optionen erhält man, wenn man es mit der Maus anklickt ausgegeben.
Emu.lib und MATHTS.LIB hat ich noch aus einem anderen Programm in der Kommandozeile stehen, das Resulat ohne die beiden ist aber das selbe (sorry für die Verwirrung).@elise
Natürlich bin ich unter DOS. Und ich muß(!) das Programm für’s com-file tiny compilieren.
Unter BC.EXE (Der Entwicklungsumgebung) klappt’s ja schließlich auch !
In maths.lib sind mögliche Fließkommaoperationen und Emu.lib liefert die Coprozessoremulation dazu, aber ich brauche in dem Programm keine Fließkommata und kann das “+Emu.lib+MATHTS.LIB“ natürlich auch weglassen (sorry für die verwirrende Kommandiozeile)Tlink 5.1 arbeitet übrigens genau so mit –c nach tlink.exe wie auch mit /c am Ende der Kommandozeile.
@Alle
Habe es jetzt (erhalte eine exe) mit
bcc -c- test.c
tlink c0s test.obj, test.exe,, cs /c:\bc\lib
versucht (immerhin 0 Errors:) aber
EXE2BIN.EXE test.exe test.com liefert
“File cannot be converted“ ....Frage mich langsam, ob man mit “main()“ überhaupt ein com-file erzeugen kann.
P.S.:
Meinen halb fertigen Device-Treiber kann ich mit
bcc -c -mt -k- -rd mydevice.c und
tlink -t -c mydevice.obj,madevice.sys
übrigens wunderbar zum com bzw. sys-file linken, aber darin gibt es ja auch
kein main() sondern nur asm org 0 usw...
-
hab mal mein altes dos buch rausgeholt
pc intern.
der tlink kann doch mit
/t = create COM fileein comfile erstellen.somit ist man auf nachträgliches umwandeln von exe zu com nicht angewiesen.
welches dos hast du denn installiert?
so long erstmal.
ps: unsinn wegeditiert
-
hast du speichermodel tiny richtig eingestellt?
nach nachfrage eben ist dein programm wohl zu groß.
(die fehlermeldung weist darauf hin.)
im grunde musst du nur diese c0s.. oder so zulinken für tiny.
-
elise schrieb:
der tlink kann doch mit /t = create COM file
Hab's mit /t versucht doch der Linker meldet
"Fatal: Cannot generate COM file : stack segment present"Die DOS-Version ist dazu übrigens ganz sicher nicht erheblich
(verwende 7, also WIN98, aber der Linker läuft ja)Hat denn niemand außer mir bcc und tlink, so daß er main(){printf("Hello World");}
als com-File zum laufen bekommt !???
-
wie ist dein bcc aufruf?
so?BCC -mt -lt tiny will create TINY.COM instead of TINY.EXE. The -l switch passes the /t argument to the linker in this case.
aus volkards link!
mt fehlt nun bei dir
-
Habe dann jetzt
BCC -mt -lt test.c
probiert, aber BCC produziert kein com-file, sondern nur ein 352 Byte großes obj (also ohne printf-Library)Das anschließende Linken
tlink -t c0s test.obj, test.com,, cs /c:\progra~1\bc\lib
erzeugt weiterhin
"Fatal: Cannot generate COM file : stack segment present"
-
schau bitte mal in deinem compilerfaq des bccs nach (habe keinen hier, nur den tclite), wie man ordentlich tiny macht.
im grunde muss es bei den anforderungen so gehen:
DOS versions 3.2 and earlier include an EXE2BIN utility that converts EXE files to COM files. Users who do not have EXE2BIN can use TLINK, the Borland C++ command-line linker, to create a COM file instead of an EXE file. Use the /t option. For example: BCC -mt -lt tiny will create TINY.COM instead of TINY.EXE. The -l switch passes the /t argument to the linker in this case. There are certain limitations in converting an EXE file to a COM file. These limitations are documented in the IBM Disk Operating System manual under EXE2BIN. Borland C++'s TINY model is compatible with the COM format, but programs that use Borland C++'s floating-point routines cannot be used in a TINY model application.
-
die fehlermeldung sagt, du machst kein tiny. irgendwas stimmt hier nicht, entweder du hast doch einen anderen compiler, machst es über die konsole, und nicht dos direkt, oder dein tlink will /t und die reihenfolge meines tlinks..
na ja, weitersuchen ... vielleicht kennt ein anderer deine versionen.
-
user4711 schrieb:
Das anschließende Linken
tlink -t c0s test.obj, test.com,, cs /c:\progra~1\bc\lib
erzeugt weiterhin
"Fatal: Cannot generate COM file : stack segment present"Ich mag mich irren, meine Borland-Zeit ist auch schon ein paar Jahre her, aber c0s ist doch die Standardlibrary für das Small-Modell. Gibts da keine für Tiny, mal geraten: c0t oder so?
-
gute idee, bashar,
---------------------- C0S OBJ - Small model startup code C0T OBJ - Tiny model startup code C0L OBJ - Large model startup code
-
So, jetzt habe ich wenigstens das "Hello-World.com" zum Laufen bekommen:
BCC -mt -lt test.c
tlink -t c0t test.obj, test.com,, cs /c:\bc\libMein ursprüngliches Testprogramm ist aber komplexer und da erhalte ich
mit bcc.exe leider immer noch Fehler (obwohl es mit BC.EXE läuft):Turbo Link Version 5.1 Copyright (c) 1992 Borland International
Fatal: Cannot generate COM file : segment-relocatable items presentLeider kein Hinweis, wo die sein könnten.
-
da steht einiges mehr.
edit: woodooo editiert.
-
-
Die Google-Suche habe ich natürlich auch schon in Erwägung gezogen (bin noch dabei, alles durchzuarbeiten, aber jetzt ist erst mal Wochenende) Dabei finde ich in dos-16.c den lapidaren Hinweis:
'Note: use of 'interrupt' keyword may cause TLINK error
"Cannot generate COM file : segment-relocatable items present" '
(und ich muß 'interrupt' verwenden, weil ich in meinem anderen Thread noch keinen funktionierenden Hinweis fand, wie man es ersetzt; asm push ax usw reicht nicht),
doch keinen Hinweis wie man den Fehler vermeidet.In http://www.vmlinux.org/~jakov/community.borland.com/16623.html finde ich:
“Some of our library functions cannot be called from in the tiny model if one wants a .COM file. “,
Bete jetzt nur, daß “interrupt“ nicht dazu gehört, sonst wird es schwierig...
-
user4711 schrieb:
Dabei finde ich in dos-16.c den lapidaren Hinweis:
'Note: use of 'interrupt' keyword may cause TLINK error
"Cannot generate COM file : segment-relocatable items present" '
(und ich muß 'interrupt' verwenden, weil ich in meinem anderen Thread noch keinen funktionierenden Hinweis fand, wie man es ersetzt; asm push ax usw reicht nicht),
doch keinen Hinweis wie man den Fehler vermeidet.Ich glaube ehrlich gesagt nicht wirklich, dass dieser Hinweis eine Berechtigung hat. Durch welchen Mechanismus soll es da denn zu relozierbaren Adressen kommen?
In http://www.vmlinux.org/~jakov/community.borland.com/16623.html finde ich:
“Some of our library functions cannot be called from in the tiny model if one wants a .COM file. “,
Bete jetzt nur, daß “interrupt“ nicht dazu gehört, sonst wird es schwierig...Nunja, interrupt ist keine Libraryfunktion
. Ich würde an deiner Stelle mal die Anleitung dort drin befolgen, und ein Assembler-Listing erstellen lassen.
-
Bashar schrieb:
user4711 schrieb:
Dabei finde ich in dos-16.c den lapidaren Hinweis:
'Note: use of 'interrupt' keyword may cause TLINK error
"Cannot generate COM file : segment-relocatable items present" '
(und ich muß 'interrupt' verwenden, weil ich in meinem anderen Thread noch keinen funktionierenden Hinweis fand, wie man es ersetzt; asm push ax usw reicht nicht),
doch keinen Hinweis wie man den Fehler vermeidet.Ich glaube ehrlich gesagt nicht wirklich, dass dieser Hinweis eine Berechtigung hat. Durch welchen Mechanismus soll es da denn zu relozierbaren Adressen kommen?
Sag ich doch
Siehe den anderen Thread, weder interrupt noch irgendwelche Libraryfunktionen lösen diesen Fehler aus, es ist eine fehlende "Optimierung" oder Typumwandlung des Compilers, die bei COM-Files nötig wäre, siehe http://www.c-plusplus.net/forum/viewtopic-var-p-is-890439.html#890439