URL: https://www.overclockers.at/coding-stuff/problem_mit_c-linker_mingw_swig_python_143666/page_1 - zur Vollversion wechseln!
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'
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.
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
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
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.Zitatexample_wrap.o(.text+0x2a48):example_wrap.c: undefined reference to `strcmp'
example_wrap.o(.text+0x2a92):example_wrap.c: undefined reference to `memcpy'
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026