DOS program i C++

Tags:    c++

Hvordan laver man et program som kan køre i dos og IKKE i dos under windows, men via ren komandopromt?
Jeg bruger både Visual C++ og Dev-C++, til hvis det er forskelligt fra program til program.



Hvordan laver man et program som kan køre i dos og IKKE i dos under windows, men via ren komandopromt?
Jeg bruger både Visual C++ og Dev-C++, til hvis det er forskelligt fra program til program.


Hmm, hvad mener du...Altså når computeren er i DOS tilstand, og ikke i command vindue...Altså så du i teorien kan køre programmet uden at have windows installeret?

Jan Larsen
CO-owner Jabo-web.com
http://www.jabo-web.com?ref=3




Den 02-01-05 12:05 skrev Jan L følgende:
-----------------------------------------------------------------------------
Hvordan laver man et program som kan køre i dos og IKKE i dos under windows, men via ren komandopromt?
Jeg bruger både Visual C++ og Dev-C++, til hvis det er forskelligt fra program til program.


Hmm, hvad mener du...Altså når computeren er i DOS tilstand, og ikke i command vindue...Altså så du i teorien kan køre programmet uden at have windows installeret?

Jan Larsen
CO-owner Jabo-web.com
http://www.jabo-web.com?ref=3

-----------------------------------------------------------------------------

ja så det kan køre når jeg starter computeren uden noget operativsystem altså.



ja så det kan køre når jeg starter computeren uden noget operativsystem altså.


Du skal bare sætte linkeren og compileren til ikke at linke til nogle libraries, og kompilere det som en flat binary. Derefter skal du læse lidt op på hvordan bootloaders fungerer (det letteste er at installere Grub, og så følge multiboot specifikationen), eller eventuelt undersøge hvordan du får din BIOS til at boote på dit program.
--
I\\'m bloggin\\' it.
http://www.sigkill.dk/blog




ja så det kan køre når jeg starter computeren uden noget operativsystem altså.


Bare fordi noget et tekstbaserede betyder det _IKKE_ at det er dos!
Den tekst din computer skriver når du starter den, har absolut intet med dos at gøre. Det er din BIOS der laver arbejdet der.
Du er - som Troels også siger - nødt til at boote et operativsystem. Jeg tror ikke man kan pille så meget med BIOS'en, at du kan få dit program til at køre under POST.






Du skal bare sætte linkeren og compileren til ikke at linke til nogle libraries, og kompilere det som en flat binary.


det kan godt være at man BARE skal sætte linkeren og compileren til ikke at linke til nogle libraries, og kompile det som en flat binary. men jeg kan ikke finde noget sted i mine compilere hvor der står hvilke libraries den skal kompile, eller om den skal kompile det som flat binary. jeg har både visual C++ og Dev-C++ så hvis du kan forklare mig det i BARE et af sprogene ville det være rart.



Jeg går ud fra at du vil lave et DOS program og ikke et OS ?

Jeg tror ikke at Visual C++ eller Dev-c++ (MinGW) kan kompilere til DOS.

Digital Mars kan:
http://www.digitalmars.com/

Du kan også bruge en gammel TurboC++:
http://community.borland.com/museum/



Du kan også bruge DJGPP:
http://www.delorie.com/djgpp/

Det er en gcc klon og ligner dermed MinGW (den kompiler som Dev-C++ bruger), måske kan du sætte Dev-C++ til at bruge DJGPP.



Jeg tror ikke at Visual C++ eller Dev-c++ (MinGW) kan kompilere til DOS.


kender du så et andet "gratis" program man kan hente fra internettet som er let tilgængeligt som kan kompile dos?



det kan godt være at man BARE skal sætte linkeren og compileren til ikke at linke til nogle libraries, og kompile det som en flat binary. men jeg kan ikke finde noget sted i mine compilere hvor der står hvilke libraries den skal kompile


gcc:
Brug følgende parametre til din compiler: -nostdlib -fno-builtin -fno-exceptions -nostartfiles -fnortti. Du skal også undlade at linke, og altså derfor bruge -c.

Derefter skal du linke dine objektfiler. gcc kommer med ld, så du kan f.eks. bruge et linkerscript:

Fold kodeboks ind/udKode 


Du skal naturligvis have den nødvendige kode i dine objektfiler -- navnligt constructorlister for globale objekter (det er ikke nemt at bruge C++ som standalone).

Linkeren kan bruges således: ld -T link.ld, hvor link.ld er navnet på linkerscriptet.

Hvis du stadigvæk er interesseret, så læs dokumentationen. Det er et utroligt komplekst emne.

--
I\\'m bloggin\\' it.
http://www.sigkill.dk/blog



Jeg har nævnt tre, de er alle gratis, men der findes ikke en perfekt kompiler:

1: TurboC++ er gammel, ikke helt med på moderne Ansi C++ standard, men let at bruge. Turbo C++ kommer med en IDE, der inkludere hjælp, editor, debugger osv, den heder TC.EXE (Jeg lærte C/C++ med TurboC++ i ca 1990.)

2: Jeg har ikke brugt DJGPP for nyligt (ca 5år), sidst jeg prøvede den var den glimrende, men forstod ikke lange filnavne (det gør Turbo C++ heller ikke). Der findes en IDE til DJGPP der hedder RHIDE, den ligner TurboC's en del. Du kan måske få Dev-Cpp til at kompile med DJGPP.

3: Digital Mars er en glimrende kompiler, den understøtter dog ikke umidelbart de sidste nye Windows features (men det behøver du vist ikke her). Jeg tror man kan købe en IDE til Digital Mars, men der er ikke nogen gratis IDE. Digital Mars kan ikke kompilere i DOS men godt lave DOS programmer.



t