Linkerfehler in DEV-C++
-
Hallo!
Hab ein kleines Programm, das mir C++ mit einem TCL-Script verbinden soll. Dazu will ich mit DEV-C++ eine dll-Datei erstellen. Compilieren geht, aber der Linker gibt mir folgende Fehlermeldung:
*********************************************
Compiler: Default compiler
Building Makefile: "E:\Projekt_Interface\programs\little\Makefile.win"
Führt make... aus
make.exe -f "E:\Projekt_Interface\programs\little\Makefile.win" all
g++.exe -c myinteger.cpp -o myinteger.o -I"C:/Programme/Dev-Cpp/include/c++/3.3.1" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/mingw32" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/backward" -I"C:/Programme/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include" -I"C:/Programme/Dev-Cpp/include" -DBUILDING_DLL=1g++.exe -c myintegerItclAdapter.cpp -o myintegerItclAdapter.o -I"C:/Programme/Dev-Cpp/include/c++/3.3.1" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/mingw32" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/backward" -I"C:/Programme/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include" -I"C:/Programme/Dev-Cpp/include" -DBUILDING_DLL=1
dllwrap.exe --output-def liblittle.def --driver-name c++ --implib liblittle.a myinteger.o myintegerItclAdapter.o -L"C:/Programme/Dev-Cpp/lib" --no-export-all-symbols --add-stdcall-alias -o little.dll
myintegerItclAdapter.o(.text_ZN20myintegerItclAdapterC1EP10Tcl_Interp+0x107):myintegerItclAdapter.cpp: undefined reference to
\_imp\_\_Itcl_RegisterObjC' myintegerItclAdapter.o(.text$\_ZN20myintegerItclAdapterC1EP10Tcl\_Interp+0x154):myintegerItclAdapter.cpp: undefined reference to
_imp__Itcl_RegisterObjC'
myintegerItclAdapter.o(.text_ZN20myintegerItclAdapterC1EP10Tcl_Interp+0x1be):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Tcl_PkgProvide' myintegerItclAdapter.o(.text$\_ZN3Tcl7AdapterI20myintegerItclAdapterED2Ev+0x32):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_DeleteExitHandler'
myintegerItclAdapter.o(.text_ZN3Tcl4HashIP9MyIntegerLi1EED1Ev+0x10):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Tcl\_DeleteHashTable' myintegerItclAdapter.o(.text$\_ZN20myintegerItclAdapter11DestructCmdEiPKP7Tcl\_Obj+0x2d):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_WrongNumArgs'
myintegerItclAdapter.o(.text_ZN20myintegerItclAdapter6GetCmdEiPKP7Tcl_Obj+0x9a):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Tcl_NewStringObj' myintegerItclAdapter.o(.text$\_ZN20myintegerItclAdapter6GetCmdEiPKP7Tcl\_Obj+0xae):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_SetObjResult'
myintegerItclAdapter.o(.text$_ZN20myintegerItclAdapter6GetCmdEiPKP7Tcl_Obj+0xcc):myintegerItclAdapter.cpp: undefined reference to `_imp__Tcl_NewIntObj'myintegerItclAdapter.o(.text_ZN20myintegerItclAdapter7IncrCmdEiPKP7Tcl_Obj+0x2d):myintegerItclAdapter.cpp: undefined reference to
\_imp\_\_Tcl_WrongNumArgs' myintegerItclAdapter.o(.text$\_ZN20myintegerItclAdapter7IncrCmdEiPKP7Tcl\_Obj+0x97):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_NewStringObj'
myintegerItclAdapter.o(.text_ZN4Itcl8IAdapterI20myintegerItclAdapterE10GetItclObjEPP10ItclObjectP7Tcl_Obj+0x1e):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Itcl_GetContext' myintegerItclAdapter.o(.text$\_ZN4Itcl8IAdapterI20myintegerItclAdapterE10GetItclObjEPP10ItclObjectP7Tcl\_Obj+0x35):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_GetString'
myintegerItclAdapter.o(.text_ZN4Itcl8IAdapterI20myintegerItclAdapterE10GetItclObjEPP10ItclObjectP7Tcl_Obj+0x58):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Tcl_GetObjResult' myintegerItclAdapter.o(.text$\_ZN4Itcl8IAdapterI20myintegerItclAdapterE10GetItclObjEPP10ItclObjectP7Tcl\_Obj+0x83):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_AppendStringsToObj'myintegerItclAdapter.o(.text_ZN3Tcl4HashIP9MyIntegerLi1EE4NextEPS2_PPKv+0xd):myintegerItclAdapter.cpp: undefined reference to
\_imp\_\_Tcl_NextHashEntry' myintegerItclAdapter.o(.text$\_ZN3Tcl4HashIP9MyIntegerLi1EE7ExtractEPKvPS2\_+0x4b):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_DeleteHashEntry'
myintegerItclAdapter.o(.text_ZN3Tcl7AdapterI20myintegerItclAdapterE23InitBaseForAutoDestructEv+0x34):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Tcl\_CreateExitHandler' myintegerItclAdapter.o(.text$\_ZN3Tcl7AdapterI20myintegerItclAdapterED1Ev+0x32):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_DeleteExitHandler'
myintegerItclAdapter.o(.text$_ZN3Tcl7AdapterI20myintegerItclAdapterED0Ev+0x32):myintegerItclAdapter.cpp: undefined reference to `_imp__Tcl_DeleteExitHandler'dllwrap.exe: no export definition file provided.
Creating one, but that may not be what you want
dllwrap.exe: c++ exited with status 1make.exe: *** [little.dll] Error 1
Ausführung beendet
********************************************
Ich weiss leider nicht, wie man in diesem Forum Files anhängt, und da der Code in 16 Dateien ist, kann ich ihn leider nicht mitschicken.
Hoffe, dass mir trotzdem irgendwer helfen kann. Anscheinend muss ich hier noch irgendwelche libs dazugeben, aber ich hab keine Ahnung welche.Bin echt dankbar für jede Hilfe.
Lg
Christian Galbavy
-
du solltest die lib's für tcl mitlinken. ich vermute mal "-ltcl"
-
Hallo!
Ja, das ist klar, aber ich weiss leider nicht genau wie. Wenn ich -Itcl zum Compiler-Aufruf dazufüge, ändert sich nix. Ich hab TCL 8.4.7.0 bei mir installiert. Ich hab die Ordner TCL/lib (hier ist eine tcl84.lib-Datei) und TCL/lib/itcl3.2 bei Dev-C++ zu den Bibliotheks-Verzeichnissen dazugegeben, aber auch das hilft nichts.
Überseh ich da irgendwas?Lg
Christian
-
galb schrieb:
Wenn ich -Itcl zum Compiler-Aufruf dazufüge, ändert sich nix. Ich hab TCL 8.4.7.0 bei mir installiert.
du meintest linker aufruf? probier doch mal -ltcl84
galb schrieb:
g++.exe -c myinteger.cpp -o myinteger.o -I"C:/Programme/Dev-Cpp/include/c++/3.3.1" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/mingw32" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/backward" -I"C:/Programme/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include" -I"C:/Programme/Dev-Cpp/include" -DBUILDING_DLL=1
g++.exe -c myintegerItclAdapter.cpp -o myintegerItclAdapter.o -I"C:/Programme/Dev-Cpp/include/c++/3.3.1" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/mingw32" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/backward" -I"C:/Programme/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include" -I"C:/Programme/Dev-Cpp/include" -DBUILDING_DLL=1
dllwrap.exe --output-def liblittle.def --driver-name c++ --implib liblittle.a myinteger.o myintegerItclAdapter.o -L"C:/Programme/Dev-Cpp/lib" --no-export-all-symbols --add-stdcall-alias -o little.dll
hier sieht man aber nix von zusätzlichen verzeichnissen oder das du tcl mitlinkst
-
Hallo!
Also der neue Compiler-Linker-Ouput schaut so aus:
*********************************************
Compiler: Default compiler
Building Makefile: "E:\Projekt_Interface\programs\little\Makefile.win"
Führt make clean aus
rm -f myinteger.o myintegerItclAdapter.o little.dllg++.exe -c myinteger.cpp -o myinteger.o -I"C:/Programme/Dev-Cpp/include/c++/3.3.1" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/mingw32" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/backward" -I"C:/Programme/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include" -I"C:/Programme/Dev-Cpp/include" -DBUILDING_DLL=1
g++.exe -c myintegerItclAdapter.cpp -o myintegerItclAdapter.o -I"C:/Programme/Dev-Cpp/include/c++/3.3.1" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/mingw32" -I"C:/Programme/Dev-Cpp/include/c++/3.3.1/backward" -I"C:/Programme/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include" -I"C:/Programme/Dev-Cpp/include" -DBUILDING_DLL=1
dllwrap.exe --output-def liblittle.def --driver-name c++ --implib liblittle.a myinteger.o myintegerItclAdapter.o -L"C:/Programme/Dev-Cpp/lib" -L"C:/Tcl/lib" -L"C:/Tcl/lib/itcl3.2" -Itcl84 --no-export-all-symbols --add-stdcall-alias -o little.dll
myintegerItclAdapter.o(.text_ZN20myintegerItclAdapterC1EP10Tcl_Interp+0x107):myintegerItclAdapter.cpp: undefined reference to
\_imp\_\_Itcl_RegisterObjC' myintegerItclAdapter.o(.text$\_ZN20myintegerItclAdapterC1EP10Tcl\_Interp+0x154):myintegerItclAdapter.cpp: undefined reference to
_imp__Itcl_RegisterObjC'
myintegerItclAdapter.o(.text_ZN20myintegerItclAdapterC1EP10Tcl_Interp+0x1be):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Tcl_PkgProvide' myintegerItclAdapter.o(.text$\_ZN3Tcl7AdapterI20myintegerItclAdapterED2Ev+0x32):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_DeleteExitHandler'
myintegerItclAdapter.o(.text_ZN3Tcl4HashIP9MyIntegerLi1EED1Ev+0x10):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Tcl\_DeleteHashTable' myintegerItclAdapter.o(.text$\_ZN20myintegerItclAdapter11DestructCmdEiPKP7Tcl\_Obj+0x2d):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_WrongNumArgs'
myintegerItclAdapter.o(.text_ZN20myintegerItclAdapter6GetCmdEiPKP7Tcl_Obj+0x9a):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Tcl_NewStringObj' myintegerItclAdapter.o(.text$\_ZN20myintegerItclAdapter6GetCmdEiPKP7Tcl\_Obj+0xae):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_SetObjResult'
myintegerItclAdapter.o(.text$_ZN20myintegerItclAdapter6GetCmdEiPKP7Tcl_Obj+0xcc):myintegerItclAdapter.cpp: undefined reference to `_imp__Tcl_NewIntObj'myintegerItclAdapter.o(.text_ZN20myintegerItclAdapter7IncrCmdEiPKP7Tcl_Obj+0x2d):myintegerItclAdapter.cpp: undefined reference to
\_imp\_\_Tcl_WrongNumArgs' myintegerItclAdapter.o(.text$\_ZN20myintegerItclAdapter7IncrCmdEiPKP7Tcl\_Obj+0x97):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_NewStringObj'
myintegerItclAdapter.o(.text_ZN4Itcl8IAdapterI20myintegerItclAdapterE10GetItclObjEPP10ItclObjectP7Tcl_Obj+0x1e):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Itcl_GetContext' myintegerItclAdapter.o(.text$\_ZN4Itcl8IAdapterI20myintegerItclAdapterE10GetItclObjEPP10ItclObjectP7Tcl\_Obj+0x35):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_GetString'
myintegerItclAdapter.o(.text_ZN4Itcl8IAdapterI20myintegerItclAdapterE10GetItclObjEPP10ItclObjectP7Tcl_Obj+0x58):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Tcl_GetObjResult' myintegerItclAdapter.o(.text$\_ZN4Itcl8IAdapterI20myintegerItclAdapterE10GetItclObjEPP10ItclObjectP7Tcl\_Obj+0x83):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_AppendStringsToObj'myintegerItclAdapter.o(.text_ZN3Tcl4HashIP9MyIntegerLi1EE4NextEPS2_PPKv+0xd):myintegerItclAdapter.cpp: undefined reference to
\_imp\_\_Tcl_NextHashEntry' myintegerItclAdapter.o(.text$\_ZN3Tcl4HashIP9MyIntegerLi1EE7ExtractEPKvPS2\_+0x4b):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_DeleteHashEntry'
myintegerItclAdapter.o(.text_ZN3Tcl7AdapterI20myintegerItclAdapterE23InitBaseForAutoDestructEv+0x34):myintegerItclAdapter.cpp: undefined reference to\_imp\_\_Tcl\_CreateExitHandler' myintegerItclAdapter.o(.text$\_ZN3Tcl7AdapterI20myintegerItclAdapterED1Ev+0x32):myintegerItclAdapter.cpp: undefined reference to
_imp__Tcl_DeleteExitHandler'
myintegerItclAdapter.o(.text$_ZN3Tcl7AdapterI20myintegerItclAdapterED0Ev+0x32):myintegerItclAdapter.cpp: undefined reference to `_imp__Tcl_DeleteExitHandler'dllwrap.exe: no export definition file provided.
Creating one, but that may not be what you want
dllwrap.exe: c++ exited with status 1make.exe: *** [little.dll] Error 1
Ausführung beendet
********************************************************Die libs werden eingefügt und auch "-Itcl84" ist jetzt dabei. Funktioniert aber einfach nicht. Hab auch schon beim Linker folgendes versucht:
-I"C:/Tcl/lib/tcl84.lib" bzw. auch -L"C:/Tcl/lib/tcl84.lib".
Ausserdem hab ich auch schon versucht beim Compiler folgendes mitzugeben:
-I"C:/Tcl/lib/tcl84.lib" bzw. -I"C:/Tcl/lib" aber das alles verändert nichts.Hast du sonst noch eine Idee?
Lg
Christian Galbavy
-
schreib mal -ltcl84 ("l" am anfang statt "I")
wenn dies auch nicht geht versuch mal lib über "bibilothek/objekt hinzufügen" button mitzulinken.
saug mir grad tcl um es auszuprobieren.
-
Funktioniert leider auch nicht.
Wenn du willst, schick ich dir die source-Files von meinem Programm per Email. Meine Adresse ist:
slate@sbox.tugraz.at
Vielen Dank für deine Hilfe.
Lg
Christian Galbavy
-
dein prog bekomme ich nicht zu laufen. allerdings wenn ich das sample von hier http://wiki.tcl.tk/2419 kompiliere dann geht's. es hat den anschein als würde dir noch die lib's von <itcl> fehlen. leider kann ich dir nicht mehr weiterhelfen
denn von tcl/tk versteh ich net so viel.