Seite 1 von 1

[C] Probleme beim kompilieren unter Linux

Verfasst: Samstag 25. Juli 2009, 05:06
von theliquidwave
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

Verfasst: Samstag 25. Juli 2009, 06:19
von snafu
Zur letzten Frage:

Code: Alles auswählen

make &> log.txt

Verfasst: Samstag 25. Juli 2009, 08:47
von birkenfeld
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.

Verfasst: Samstag 25. Juli 2009, 09:38
von BlackJack
Ausserdem scheint es auch eher eine C++-Frage, denn eine C-Frage zu sein.

Verfasst: Samstag 25. Juli 2009, 13:37
von theliquidwave
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

Verfasst: Samstag 25. Juli 2009, 13:45
von cofi
Ich hab grade kein Debianoides Linux da, aber das Paket muesste wohl python-devel (oder so aehnlich) heissen.

Verfasst: Samstag 25. Juli 2009, 14:22
von theliquidwave
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

Verfasst: Samstag 25. Juli 2009, 14:53
von BlackJack
@Chrisber: Die ist in dem Archiv das man laut Anleitung entpacken soll.

Verfasst: Samstag 25. Juli 2009, 16:28
von snafu
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`.

Verfasst: Samstag 25. Juli 2009, 17:47
von theliquidwave
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

Verfasst: Samstag 25. Juli 2009, 17:57
von birkenfeld
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").

Verfasst: Samstag 25. Juli 2009, 18:06
von theliquidwave
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

Verfasst: Samstag 25. Juli 2009, 18:29
von birkenfeld
Warum hast du immer noch eine lokale pyconfig.h?

Verfasst: Samstag 25. Juli 2009, 18:33
von theliquidwave
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

Verfasst: Samstag 25. Juli 2009, 19:13
von 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.

Verfasst: Samstag 25. Juli 2009, 19:20
von cofi
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.

Verfasst: Sonntag 26. Juli 2009, 00:06
von theliquidwave
Achso :D
Omfg ^^
Jetzt geht es, mit der richtigen pyconfig.h
Dankeschön an euch alle =)

~ Chris