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

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/problem_mit_c-linker_mingw_swig_python_143666/page_1 - zur Vollversion wechseln!


mkdigital schrieb am 06.06.2005 um 17:38

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 schrieb am 06.06.2005 um 20:27

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 schrieb am 06.06.2005 um 21:40

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 schrieb am 07.06.2005 um 08:47

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 schrieb am 07.06.2005 um 13:32

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.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026