problem mit c-Linker (MinGW/SWIG/Python)
mkdigital 06.06.2005 - 17:38 1301 4
mkdigital
Big d00d
|
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.htmlTIA 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
ModeratorHoffnungsloser Optimist
|
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
|
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
|
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
AdministratorLegends never die
|
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.
|