[C] Probleme beim kompilieren unter Linux

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Hi.
Unter Windows kompiliert mein Plugin für ein Spiel ohne irgendwelche Probleme - unter Linux kommen allerdings für jede Python Header Datei pro Zeile ein/mehrere Fehler und ich weiß einfach nicht mehr, was ich da machen kann.
Hier ist ein _minimaler_ Auszug aus dem Log:

Code: Alles auswählen

                 from Source/NativeTools.cpp:1:
/home/christian/nativetools/Python/sysmodule.h:10: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/sysmodule.h:11: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/sysmodule.h:12: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/sysmodule.h:13: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/sysmodule.h:14: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/sysmodule.h:16: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/sysmodule.h:18: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/sysmodule.h:21: warning: ISO C++ forbids declaration of ‘__declspec’ with no type
/home/christian/nativetools/Python/sysmodule.h:21: warning: ‘__declspec’ initialized and declared ‘extern’
/home/christian/nativetools/Python/sysmodule.h:21: error: redefinition of ‘int __declspec’
/home/christian/nativetools/Python/object.h:375: error: ‘int __declspec’ previously defined here
/home/christian/nativetools/Python/sysmodule.h:21: error: ‘dllimport’ was not declared in this scope
/home/christian/nativetools/Python/sysmodule.h:22: warning: ISO C++ forbids declaration of ‘__declspec’ with no type
/home/christian/nativetools/Python/sysmodule.h:22: warning: ‘__declspec’ initialized and declared ‘extern’
/home/christian/nativetools/Python/sysmodule.h:22: error: redefinition of ‘int __declspec’
/home/christian/nativetools/Python/object.h:375: error: ‘int __declspec’ previously defined here
/home/christian/nativetools/Python/sysmodule.h:22: error: ‘dllimport’ was not declared in this scope
/home/christian/nativetools/Python/sysmodule.h:24: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/sysmodule.h:25: error: expected constructor, destructor, or type conversion before ‘(’ token
In file included from /home/christian/nativetools/Python/Python.h:123,
                 from Source/Headers/NativeTools.hpp:45,
                 from Source/NativeTools.cpp:1:
/home/christian/nativetools/Python/intrcheck.h:8: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/intrcheck.h:9: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/intrcheck.h:10: error: expected constructor, destructor, or type conversion before ‘(’ token
In file included from /home/christian/nativetools/Python/Python.h:124,
                 from Source/Headers/NativeTools.hpp:45,
                 from Source/NativeTools.cpp:1:
/home/christian/nativetools/Python/import.h:10: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/import.h:11: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/import.h:12: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/import.h:14: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/import.h:15: error: expected constructor, destructor, or type conversion before ‘(’ token
/home/christian/nativetools/Python/import.h:16: error: expected constructor, destructor, or type conversion before ‘(’ token
Und so weiter...
Weiß jemand, woran das liegen kann?
Hier ist meine aktuelle Makefile: http://pastebin.com/d1a4cc05d

Dabei noch mal eine kleine Frage nebenbei? Wie kann ich die Ausgabe von make in eine Datei umleiten?
`make >> log.txt` leitet nur direkte Ausgaben von make dahinein, aber nicht die Fehler die vom Compiler produziert werden :S

~ Chris
Grüßle.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Zur letzten Frage:

Code: Alles auswählen

make &> log.txt
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Du hast die Header einfach von einer Windows-Pythoninstallation kopiert, nicht wahr? Das funktioniert so nicht; du brauchst für ein anderes Betriebssystem zumindest auch eine entsprechende "pyconfig.h"; und auch unter verschiedenen Unix-Systemen ist die nicht immer gleich, sondern wird vom configure-Skript erstellt.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
BlackJack

Ausserdem scheint es auch eher eine C++-Frage, denn eine C-Frage zu sein.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

OMFG!!!!!
Endlich mal ein Hoffnungsschimmer :D
Ich dachte dass die Dateien für Windows und Linux gleich sind.
Kann mir jemand sagen, wo ich die richtige pyconfig.h herkriege? Oder gleich die kompletten Headerdateien für Linux? Ich finde die einfach nicht, ich habe die aus einem Beispielprojekt für ein Serverplugin gehabt. Desweiteren gibt es bei mir kein `configure`, apt-get kennt es auch nicht :(

Danke an Alle :)

~ Chris
Grüßle.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich hab grade kein Debianoides Linux da, aber das Paket muesste wohl python-devel (oder so aehnlich) heissen.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Hi.
Ich hab jetzt in /usr/bin eine python-config bzw. python2.5-config, damit anstellen kann ich leider jedoch nicht wirklich was anstellen.
Laut http://pyqwt.sourceforge.net/doc4/install.html brauch ich doch eine configure.py die ich bei mir absolut nirgends finden kann :/

~ Chris
Grüßle.
BlackJack

@Chrisber: Die ist in dem Archiv das man laut Anleitung entpacken soll.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

cofi hat geschrieben:Ich hab grade kein Debianoides Linux da, aber das Paket muesste wohl python-devel (oder so aehnlich) heissen.
Um genau zu sein `python-dev`.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Hi.
Danke :D

Habe jetzt folgendes ausgeführt, doch die auch in der Readme beschrieben Makefile.pre existiert bei mir nicht (nur eine normale Makefile):

Code: Alles auswählen

Chris:/usr/lib/python2.5/config# ls
config.c  config.c.in  install-sh  libpython2.5.a  libpython2.5-pic.a  libpython2.5.so	Makefile  makesetup  python.o  Setup  Setup.config  Setup.local
Chris:/usr/lib/python2.5/config# make
make: *** Keine Targets.  Schluss.
Chris:/usr/lib/python2.5/config# ./makesetup
sed: kann Makefile.pre nicht lesen: Datei oder Verzeichnis nicht gefunden
Mit den neuen Header Dateien von Python funktioniert das ganze, nur jetzt meckert er natürlich dass die pyconfig.h noch fehlt (logisch).

~ Chris
Grüßle.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Moment, du bringst da zwei Sachen durcheinander. configure/make musst du nur aufrufen, wenn du Python aus der Quelldistribution bauen willst. Im Fall von Debian-Paketen hat das aber Debian für dich schon erledigt.

Die pyconfig.h ist bei Debian übrigens nicht im python-dev-Paket (aber dafür alle anderen Header, also brauchst du das auch), sondern im python-Paket. Dann musst du nur noch dafür sorgen, dass der Compiler die Header auch findet (also irgendwas wie "-I /usr/include/python2.x").
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

ES GEHT! ! ! ! ! !
Verdammt geil, endlich ein Erfolgserlebnis, ich danke euch allen vielmals :)

Jedoch bleibt noch ein Fehler übrig, der sich auf Python bezieht:

Code: Alles auswählen

/home/christian/nativetools/Python/pyport.h:761:2: error: #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
Weiß jemand woran das liegen kann? Soweit ich weiß habe ich nichts für gcc bzw. glibc konfiguriert, beide sind auf neuestem Stand.

~ Chris
Grüßle.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Warum hast du immer noch eine lokale pyconfig.h?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Was meinst du damit?
Ich habe mir den Python 2.5.2. gesaugt, dort ist auch das configure-script dabei. Dann habe ich die generierte pyconfig.h in meinen Projektordner eingefügt und dann ging es (bis auf den einen Error halt) ;)

~ Chris
Grüßle.
BlackJack

@Chrisber: Ich denke genau *das* meinte birkenfeld. Warum nimmst Du etwas von einem anderen Python als dem über die Paketverwaltung installierten Python!? Zu *dem* soll das ja am Ende alles passen.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Um das nochmal klar zu machen: Mit ``python-dev``(Danke snafu, ich war zu faul meinen Laptop zu booten ;)) Installierst du die zu deiner Version passenden Header-Dateien, um deine eigenen Programme dagegen linken zu koennen.

Mit den Sourcen handelst du dir u.U. eine ganz andere Version ein, als du eigentlich installiert hast (auch wenn es die gleiche Version ist, Distributoren legen manchmal selbst Hand an) und du solltest sie nur dann benutzen, wenn du tatsaechlich selbst den Interpreter compilieren willst.

Wenn du Probleme hast, die sagen, dass die Header nicht gefunden werden, dann sind die nicht im Suchpfad -> siehe birkenfelds Post.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Achso :D
Omfg ^^
Jetzt geht es, mit der richtigen pyconfig.h
Dankeschön an euch alle =)

~ Chris
Grüßle.
Antworten