"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

problem mit c-Linker (MinGW/SWIG/Python)

mkdigital 06.06.2005 - 17:38 1301 4
Posts

mkdigital

Big d00d
Avatar
Registered: Apr 2004
Location: krems an der don..
Posts: 307
hi!

folgendes problem: ich möchte gerne auf c-funktionen von Python und Java aus zugreifen. SWIG (http://www.swig.org/) machts angeblich möglich.
es generiert aus der .c datei ein interface für die jeweilige programmiersprache (ebenfalls ne .c datei)

diese muss man dann compilieren und linken.

das compilieren funtkioniert, nur mit dme linken zu ner .pyd oder .dll datei gibts probleme. ich bin jetz net so ein c-guru, als dass ich sagen könnte was mir da der linker mitteilen will. zum compilieren und linken verwende ich MinGW (mingw.org, gcc und ld für windows).

die c dateien sind von dem tutorial auf der swig homepage, die befehle auch: http://www.swig.org/tutorial.html

TIA


Code:
C:\..\my\ex>swig -python example.i

C:\..\my\ex>gcc -c example.c example_wrap.c -I C:\..\ActivePython\include

C:\..\my\ex>ld -shared example.o example_wrap.o -o _example.so
................................. (auszug aus der fehlermeldung)
example_wrap.o(.text+0x282d):example_wrap.c: undefined reference to `_imp__PyCOb
ject_FromVoidPtr'
example_wrap.o(.text+0x2854):example_wrap.c: undefined reference to `_imp__PyMod
ule_AddObject'
example_wrap.o(.text+0x28fb):example_wrap.c: undefined reference to `_imp__Py_In
itModule4'
example_wrap.o(.text+0x290e):example_wrap.c: undefined reference to `_imp__PyMod
ule_GetDict'
example_wrap.o(.text+0x29a4):example_wrap.c: undefined reference to `_imp__PyDic
t_SetItemString'
example_wrap.o(.text+0x2a48):example_wrap.c: undefined reference to `strcmp'
example_wrap.o(.text+0x2a92):example_wrap.c: undefined reference to `memcpy'

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Der Linker will dir sagen, dass du irgendein Python Zeug und Teile der C-Runtime nicht dazulinkst.

Frag mich aber nicht, wie man dem das beibringt.

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Hmm also ich kenn mich mit dem MinGW zwar nicht aus aber das schaut so aus, als ob der ld die libs nicht finden würde. Gib sie ihm mal mit -l oder -L an.
Du kannst auch mal probieren das ganze mit gcc zu kompilieren und zu linken (also so, dass gcc den Linker aufruft).
Müsste dann irgendwie so ähnlich aussehen:
gcc -shared example.c example_wrap.c -I C:\..\ActivePython\include -o example.so

mkdigital

Big d00d
Avatar
Registered: Apr 2004
Location: krems an der don..
Posts: 307
ok, die frage ist nur wo die libs sind.

ich habs auch mit dem gratis microsoft visual c toolkit probiert, da gibts genau die selben erbebnisse (compilieren ok, linken geht net, ähnliche fehlermeldung, visual c compiler höhrt auf "cl")

aber ich probiers mal mit dem gcc inkl linken

mfg

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
Zitat
example_wrap.o(.text+0x2a48):example_wrap.c: undefined reference to `strcmp'
example_wrap.o(.text+0x2a92):example_wrap.c: undefined reference to `memcpy'
diese hier wird er beim msc compiler ja finden (libc.lib oder msvcrt.lib).. die sind standardmäßig bei jedem projekt dabei. zusätzliche libs musst du manuell eintragen. der zusätzliche lib pfad, falls nötig, muss dabei ebenfalls richtig gesetzt sein.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz