[C++] Allegro Probleme

daemon777

Lt. Commander
Registriert
Dez. 2003
Beiträge
1.371
Hallo Leute,

jetzt funktioniert der Compiler und meine Programme funktionieren seltsamer weise auch. Allerdings hab ich jetzt ein neues Problem und zwar :

Ich habe vor die Allegro Datenbank zu benutzen. Wenn ich allerdings versuche allegro.h einzubinden , meldet der Compiler einen Fehler. Woran kann das liegen.
Hab ich Allegro vielleicht in den falschen Ordner entpackt ? In welchen Ordner muss man das entpacken ? Kann mir jemand helfen ?

Danke schon mal !
 
Ohne die genaue Fehlermeldung ist es recht schwer zu helfen :(

Ich vermute aber, dass es kein Compilerfehler ist, sondern ein Linkerfehler.
Es könnte also sein, dass du in den Projekteinstellungen zum Linker sagen musst, dass er die Allegro-Bibliothek auch verwenden soll.
 
Also es wird eine Datei mit dem Namen alconfig.h geöffnet ! Die ruft eine Datei mit dem Namen aldjgpp.h auf auf und da is irgendwo der Fehler.

Hier ist die Compilermeldung :

Compiler: Default compiler
Führt g++.exe... aus
g++.exe "C:\Dokumente und Einstellungen\tom\Eigene Dateien\Andere Downloads\C++\allegro.cpp" -o "C:\Dokumente und Einstellungen\tom\Eigene Dateien\Andere Downloads\C++\allegro.exe" -g3 -I"C:\Dokumente und Einstellungen\tom\Desktop\Programmierung\Dev-Cpp\include\c++" -I"C:\Dokumente und Einstellungen\tom\Desktop\Programmierung\Dev-Cpp\include\c++\mingw32" -I"C:\Dokumente und Einstellungen\tom\Desktop\Programmierung\Dev-Cpp\include\c++\backward" -I"C:\Dokumente und Einstellungen\tom\Desktop\Programmierung\Dev-Cpp\include" -L"C:\Dokumente und Einstellungen\tom\Desktop\Programmierung\Dev-Cpp\lib"
In file included from C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/internal/alconfig.h:40,
from C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/base.h:36,
from C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro.h:25,
from C:/Dokumente und Einstellungen/tom/Eigene Dateien/Andere Downloads/C++/allegro.cpp:1:
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/platform/aldjgpp.h:20:19: pc.h: No such file or directory
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/platform/aldjgpp.h:22:21: dpmi.h: No such file or directory
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/platform/aldjgpp.h:23:21: go32.h: No such file or directory
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/platform/aldjgpp.h:26:27: sys/farptr.h: No such file or directory
In file included from C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/internal/alconfig.h:40,
from C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/base.h:36,
from C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro.h:25,
from C:/Dokumente und Einstellungen/tom/Eigene Dateien/Andere Downloads/C++/allegro.cpp:1:
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/platform/aldjgpp.h: In
function `void bmp_write24(long unsigned int, int)':
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/platform/aldjgpp.h:87: `
_farnspokew' undeclared (first use this function)
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/platform/aldjgpp.h:87: (Each
undeclared identifier is reported only once for each function it appears
in.)
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/platform/aldjgpp.h:88: `
_farnspokeb' undeclared (first use this function)

In file included from C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/draw.h:66,
from C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro.h:40,
from C:/Dokumente und Einstellungen/tom/Eigene Dateien/Andere Downloads/C++/allegro.cpp:1:

C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/inline/draw.inl: In
function `void _putpixel(BITMAP*, int, int, int)':
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/inline/draw.inl:250: `
_farsetsel' undeclared (first use this function)
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/inline/draw.inl: In
function `int _getpixel(BITMAP*, int, int)':
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/inline/draw.inl:264: `
_farnspeekb' undeclared (first use this function)
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/inline/draw.inl: In
function `int _getpixel15(BITMAP*, int, int)':
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/inline/draw.inl:289: `
_farnspeekw' undeclared (first use this function)
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/inline/draw.inl: In
function `int _getpixel24(BITMAP*, int, int)':
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/inline/draw.inl:339: `
_farnspeekl' undeclared (first use this function)

C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/inline/draw.inl: In
function `void _putpixel32(BITMAP*, int, int, int)':

C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/inline/draw.inl:350: `
_farnspokel' undeclared (first use this function)

In file included from C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro.h:73,
from C:/Dokumente und Einstellungen/tom/Eigene Dateien/Andere Downloads/C++/allegro.cpp:1:
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/platform/aldos.h: In
function `void _set_color(int, const RGB*)':
C:/Dokumente und Einstellungen/tom/Desktop/Programmierung/Dev-Cpp/include/allegro/platform/aldos.h:274: `

outportb' undeclared (first use this function)

C:/Dokumente und Einstellungen/tom/Eigene Dateien/Andere Downloads/C++/allegro.cpp: At
global scope:
C:/Dokumente und Einstellungen/tom/Eigene Dateien/Andere Downloads/C++/allegro.cpp:7: ISO
C++ forbids declaration of `END_OFMAIN' with no type
C:/Dokumente und Einstellungen/tom/Eigene Dateien/Andere Downloads/C++/allegro.cpp: In
function `int END_OFMAIN()':
C:/Dokumente und Einstellungen/tom/Eigene Dateien/Andere Downloads/C++/allegro.cpp:7: parse
error at end of input

Ausführung beendet


Kann mir jemand helfen ?
 
Zuletzt bearbeitet:
Ich bin jetzt nach etwas längerer Zeit mal wieder auf die Idee gekommen mit allegro ein wenig auszuprobieren da das ganze mit DirectX nicht funktioniert hat.

Ich benutze jetzt den VC++ und habe den Linker mit den allegro Bibliotheken vertraut gemacht. Allerdings bekomme ich trotz allem eine fehlermeldung.

Und zwar folgende:

Code:
--------------------Konfiguration: demo - Win32 Debug--------------------
Kompilierung läuft...
main.cpp
d:\spiele proggen\allegro\include\allegro\platform\aldjgpp.h(20) : fatal error C1083: Include-Datei kann nicht geoeffnet werden: 'pc.h': No such file or directory
Fehler beim Ausführen von cl.exe.

demo.exe - 1 Fehler, 0 Warnung(en)

Hier ist mal ein Link zur Website von Allegro:
http://alleg.sourceforge.net/wip.html

Ich weiß wirklich nicht mehr weiter.

Übrigens habe ich mit der Windows Suchfunktion schon nach der fehlenden datei ("pc.h") gesucht allerdings nichts gefunden. Es scheint fast so als wenn einfach ein Ordner fehlen sollte oder so.

Im FAQ von Allegro habe ich auch nichts gefunden woraus ich schlau werden würde.

Danke schon mal.
 
Hallo daemon777,

pc.h, dpmi.h, go32.h das sieht nach einem Dos Extender aus. Entweder ist der beim Allegro mitgeliefert, oder er setzt eine weitere Library voraus.
Das sollte aber im Readme beschrieben sein oder doch normalerweise auf der Webseite auch ein Link dazu gesetzt sein.

MfG

Arnd
 
Also auf der Seite habe ich nichts derartiges gefunden. Man muss aber hinzu sagen dass ich mit so Sachen wirklich keine ahnung habe. Ich bin froh wen ich einfach Coden kann :D

Ich hab auch eigentlich nie C++ von Grund auf gelernt deswegen fehlen mir halt solche Sachen.

In der Readme habe ich bisher auch noch nichts gefunden allerdings weiß ich ja jetzt ungefähr nach was ich suchen kann. Weiteres Problem ist dass das ganze in Englisch ist. Eigentlich kein Problem aber dieses Fachenglisch ist doch etwas anstrengend zu lesen.
 
Wie wäre es mit einem falschen #define bzgl der Plattform für die Du kompilierst.
Ich vermute mal du kompilierst für Dos, deswegen braucht er diese pc.h.
Würdest Du für Windows kompilieren, sollte die nicht gebraucht werden.

Check doch mal den Code um den include herum, ob da #ifdefs stehen.

MfG

Arnd
 
Da stehen leider eine ganze Menge davon. Also nicht in meinem Code aber in den includierten Bibliotheken. Allerdings wird von der Bibliothek behauptet dass sie vollkommen Plattformunabhängig währe.
 
Da die Lib aber nicht weiss worauf sie kompiliert wird, muss man es ihr meistens mittels #define mitteilen.
Und wenn Du z.B. für Dos kompilierst aber mit einem Windows Compiler arbeitest -> Error.
Ist ja aber nur eine denkbare Möglichkeit.

MfG

Arnd
 
Es gab doch sowas wie extern "C" oder so ähnlich. Würde das hier weiterhelfen ? Und wenn ja wie war nochmal die Syntax :freak:
 
extern "C"
{
...
};

Bringt etwas wenn Du eine C Lib in ein C++ Projekt einbinden willst.

MfG

Arnd
 
hm extern C bringt nichts. Das mit dem define hab ich nicht kapiert :D
 
Die Lib kann in etwa so aufgebaut sein:

#ifdef DOS
#include <pc.h>
#endif

#ifdef WINDOWS
#include <win.h>
#endif

Wenn Du jetzt unter Windows arbeitest und auch dafür kompilieren willst, sollte Dein Code ein #define WINDOWS enthalten. damit auch die includes für Windows eingebunden werden.
In diesem Beispiel <win.h>. Ist jetzt aber #define DOS gesetzt wird stattdessen <pc.h> includet, welches es dann nicht gibt. Da Du ja unter Windows arbeitest.

D.h. Du solltest prüfen, mit welchen #defines Du die Lib kompilierst und welche #defines die Lib erwartet.

Meistens gibt ein Compiler mit der Option -v detailiertere Infos aus, mit welchen Argumenten er arbeitet. Damit kannst Du checken was gesetzt ist.
Was die Lib erwartet, da hilft nur ein Blick in den Code der Lib.

MfG

Arnd
 
Hab das selbe Problem, allerdings versteh ich auch nicht, wie ich das lösen kann, obwohl ich jetzt schon verstehe, warum es auftaucht...

Kann mir jemand helfen?
Ich bedanke mich schon mal im Vorraus für eure Mühe und eure Hilfestellungen.
 
Was soll ich sagen, was nicht schon oben steht :-)?
Poste doch mal Deine genaue Fehlermeldung.

MfG

Arnd
 
Hi.

Meine Fehlermeldung:

exexedat.c
c:\programme\microsoft visual studio\allegro\include\allegro\platform\aldjgpp.h(20) : fatal error C1083: Include-Datei kann nicht geoeffnet werden: 'pc.h': No such file or directory
Fehler beim Ausführen von cl.exe.


Ich verstehe auch, was das Problem ist, aber was soll ich jetzt machen? Soll ich alle Dateien, die mit eingebunden sein sollen durch win.h ersetzen?


MfG

Michi
 
Includes ersetzen durch win.h wird nichts bringen. Daemon777 hat ja leider nicht geschrieben ob er das Problem gelöst hat.

Im Endeffekt musst du prüfen welche #defines gesetzt sind. Also vor dem #include "pc.h" steht ja eventuell ein #ifdef ....
Es gibt sicher auch irgendwo ein #include "windows.h" vor dem ebenfalls ein #ifdef steht.

Eventuell gibt es auch ein config file in dem diese definiert sind. Wenn du diese #defines hast, must Du im Configfile oder bei den Compileraufrufen das korrekte define setzen.

Ich habe Allegro bisher nicht ausprobiert, das ist also erst mal reine Theorie. Du kannst ja mal die relevanten Stellen posten. D.h. den Code vor dem #include "pc.h" und den Code der in der aufrufenden Datei steht.

MfG

Arnd
 
Das steht in der H-Datei, aus der auch der Fehler kommt:

Code:
#ifndef SCAN_DEPEND
   #include <pc.h>
   #include <dir.h>
   #include <dpmi.h>
   #include <go32.h>
   #include <fcntl.h>
   #include <unistd.h>
   #include <sys/farptr.h>
#endif


/* describe this platform */
#define ALLEGRO_PLATFORM_STR  "djgpp"
#define ALLEGRO_DOS
#define ALLEGRO_I386
#define ALLEGRO_LITTLE_ENDIAN
#define ALLEGRO_CONSOLE_OK
#define ALLEGRO_VRAM_SINGLE_SURFACE
#define ALLEGRO_USE_CONSTRUCTOR

In der aufrufenden Datei steht nichts besonderes, nur

Code:
#include <allegro.h>
...also nichts besonderes.


========================
Ich versteh jetzt deutlicher was du meinst, aber ich weiß immer noch nicht, was ich tun soll.

Da steht tatsächlich was mit Plattform dabei, allerdings "djgpp"
Das problem ist, dass ich keine Ahnung hab, welche Flags ich durch welche ersetzten soll ...
 
hast du den die build anweisungen gelesen? die konfiguration sieht nicht danach aus. ausser du hast absichtlich einen uralt compiler(djgpp) und dos als betriebsystem ausgewählt....

also nochmal ganz genau die anleitung für deinen compiler lesen.
 
:-) wie ich gesagt habe :-)

Code:
#define ALLEGRO_DOS

Du versuchst für DOS zu kompilieren, daher wird wohl auch der DOS Extender benötigt. Lies Dir aber sinnvollerweise mal die Anleitung durch.

Du solltest SCAN_DEPEND definieren und nach dem #define für Windows suchen. Die #defines für Dos und Console gehören auskommentiert.

MfG

Arnd
 
Zurück
Oben