swig problem

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.
sonium
User
Beiträge: 66
Registriert: Mittwoch 27. Oktober 2004, 21:04

Sonntag 13. November 2005, 13:28

Ich versuche gerade mit Swig und MinGW ein Python Modul hin zu bekommen, bzw dieses Tutorial zu befolgen. Allerdings läuft es immer auf diesen Fehler hinaus:

Irgendwie vermute ich, dass er die libpython24.a nicht findet. Wenn ja, wie habe ich die einzubinden?


Code: Alles auswählen

C:\pymodule>python setup.py build -cmingw32
running build
running build_ext
building 'example' extension
swigging example.i to example_wrap.c
C:\swig\swig.exe -python -o example_wrap.c example.i
creating build
creating build\temp.win32-2.4
creating build\temp.win32-2.4\Release
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python24\include -IC:\Pytho
n24\PC -c example_wrap.c -o build\temp.win32-2.4\Release\example_wrap.o
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python24\include -IC:\Pytho
n24\PC -c example.c -o build\temp.win32-2.4\Release\example.o
example.c:20:3: warning: no newline at end of file
writing build\temp.win32-2.4\Release\example.def
creating build\lib.win32-2.4
C:\MinGW\bin\gcc.exe -mno-cygwin -shared -s build\temp.win32-2.4\Release\example
_wrap.o build\temp.win32-2.4\Release\example.o build\temp.win32-2.4\Release\exam
ple.def -LC:\Python24\libs -LC:\Python24\PCBuild -lpython24 -lmsvcr71 -o build\l
ib.win32-2.4\example.pyd
Cannot export initexample: symbol not defined
error: command 'gcc' failed with exit status 1
- http://bash.org/?400459
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Sonntag 13. November 2005, 16:59

Ist denn die Funktion initexample in der von SWIG erzeugten C Datei example_wrap.c vorhanden und nicht als static deklariert?
sonium
User
Beiträge: 66
Registriert: Mittwoch 27. Oktober 2004, 21:04

Sonntag 13. November 2005, 19:17

also ich finde keine initexample funktion in der datei... aber das ganze zeug darin verstehe ich auch herzlich wenig.

hier mal die example_wrap.c
- http://bash.org/?400459
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Sonntag 13. November 2005, 21:04

Die Funktion könnte auch noch in der example.c stecken, aber laut Tutorial wohl ehr nicht...

In deiner example_wrap.c ist eine Funktion init_example. Schau mal, ob du das Modul nicht versehentlich _example statt example genannt hast.
sonium
User
Beiträge: 66
Registriert: Mittwoch 27. Oktober 2004, 21:04

Sonntag 13. November 2005, 22:08

in der von swig erstellten example.py steht tatsächlich "import _example"
allerdings hab ich nie eine datei oder sonstiges so benannt.

Ich hab jetzt mal meine gesammten Files hochgeladen.

wenn ich das mal läuft schreib ich ein Tutorial wies richtig geht :P
- http://bash.org/?400459
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Sonntag 13. November 2005, 22:39

Also bei mir unter Linux kann ich es einfach mit python setup.py build übersetzten.

Das muss also irgendwie an MinGW liegen, schätzte ich...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 14. November 2005, 13:14

Wie wärs mit folgender setup.cfg, die im Ordner der setup.py liegen muss:

Code: Alles auswählen

[build_ext]
compiler=mingw32
So habe ich die meisten WindowsBinaries kompiliert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Montag 14. November 2005, 14:13

Leonidas hat geschrieben:Wie wärs mit folgender setup.cfg, die im Ordner der setup.py liegen muss:

Code: Alles auswählen

[build_ext]
compiler=mingw32
Er compliliert doch schon mit dem MinGW (s.o.). Irgendwie ist die example.def fehlerhaft. Da sind die falschen Export Symbole eingetragen.

Vielleicht mal

Code: Alles auswählen

LIBRARY example.pyd
EXPORTS
initexample
in

Code: Alles auswählen

LIBRARY example.pyd
EXPORTS
init_example
ändern.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 14. November 2005, 14:51

Müsste es nicht trotzdem statt python build -cmingw32 python setup.py build_ext -cmingw32 heißen?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Montag 14. November 2005, 15:00

Leonidas hat geschrieben:Müsste es nicht trotzdem statt python build -cmingw32 python setup.py build_ext -cmingw32 heißen?
build beinhaltet build_ext, soweit ich weis.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 14. November 2005, 15:11

ProgChild hat geschrieben:build beinhaltet build_ext, soweit ich weis.
Ja, bdist_win beinhaltet auch build und somit build_ext, akzeptiert aber trotzdem keine --compiler Option.

Ich habe den ganzen Spaß auch bei mir getestet, mit SWIG 1.3.27:
example.c

Code: Alles auswählen

/* A global variable */
double Foo = 3.0;

/* Compute the greatest common divisor of positive integers */
int gcd(int x, int y) {
  int g;
  g = y;
  while (x > 0) {
    g = x;
    x = y % x;
    y = g;
  }
  return g;
}
example.i:

Code: Alles auswählen

%module example

%inline %{
extern int    gcd(int x, int y);
extern double Foo;
%} 
setup.cfg:

Code: Alles auswählen

[build_ext]
compiler=mingw32
setup.py

Code: Alles auswählen

import distutils
from distutils.core import setup, Extension

setup(
        ext_modules = [Extension("_example", ["example.i","example.c"])]
        )
Dann mit python setup.py build_ext aufgerufen, was dann funktioniert hat und mir die passende Datei _example.pyd kompiliert hat.

Achja, libpython24.a liegt im Libs-Ordner, zusammen mit den ganzen .lib Dateien, der python24.lib und der python24.dll (vermutlich unnötig viele Dateien dort, stören aber nicht).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Montag 14. November 2005, 15:28

Leonidas hat geschrieben:
ProgChild hat geschrieben:build beinhaltet build_ext, soweit ich weis.
Ja, bdist_win beinhaltet auch build und somit build_ext, akzeptiert aber trotzdem keine --compiler Option.
Warum kann dann sonium mir der Option den MinGW benutzten :?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 14. November 2005, 15:37

ProgChild hat geschrieben:Warum kann dann sonium mir der Option den MinGW benutzten :?
Tja, benutzen geht wohl :? Funktionieren tuts halt bei ihm nicht, deswegen habe ich ihm eine Alternative vorgeschlagen. Aber bei mir gab es Anfangs auch den gleichen Fehler.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sonium
User
Beiträge: 66
Registriert: Mittwoch 27. Oktober 2004, 21:04

Dienstag 15. November 2005, 21:48

tja, jetzt heist es obwohl ich .Net 2.0 und SDK installiert hab (dauerte ganz schön lange)

Code: Alles auswählen

C:\pymodule>python setup.py build_ext
running build_ext
error: The .NET Framework SDK needs to be installed before building extensions f
or Python.

irgendwie glaub ich, mag mich swig nicht.
- http://bash.org/?400459
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 15. November 2005, 22:02

Und mein Tipp mit MinGW hat bei dir nicht funktioniert?

Hast du eigentlich MinGW und MSYS+MSYS-DTK?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten