DevC++ undefined Reference bei mischen von C/C++ Code?
-
Hallo,
ich versuche gerade in einer Konsolenanwendung aus einer Klassenmethode Funktionen aus einem C-Projekt aufzurufen (namentlich dieses: http://libnodave.sourceforge.net/)Die Testprojekte die bei diesem libnodave dabei sind, kann ich auch kompilieren. Nur wenn ich die Funktionen in meinen Klassenmethoden aufrufen will, bekomme ich den Linkerfehler:
[Linker error] undefined reference to `daveConnectPLC(_daveConnection*)'
Die Objektdateien werden alle einwandfrei erstellt. Kann es evtl. damit zusammenhängen, dass ich meine Klassen mit dem CPP Kompiler übersetze, die libnodave jedoch mit CC?
Wenn ich alles mit CC übersetze bekomme ich ganz andere Fehlermeldungen (ich habe irgendwie das Gefühl, bei DevC++ sind die sowieso zufällig)
Hat jemand vielleicht einen Hinweis?
Hier mal das Makefile von DevC++:
CPP = g++.exe CC = gcc.exe WINDRES = windres.exe RES = OBJ = openSocketw.obj nodave.obj S7Item.obj S7Station.obj main.obj $(RES) LINKOBJ = openSocketw.obj nodave.obj S7Item.obj S7Station.obj main.obj $(RES) LIBS = -L"D:/Dev-Cpp/lib" ../../Dev-Cpp/lib/libwsock32.a INCS = -I"D:/Dev-Cpp/include" CXXINCS = -I"D:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"D:/Dev-Cpp/include/c++/3.4.2/backward" -I"D:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"D:/Dev-Cpp/include/c++/3.4.2" BIN = S7Nodave_Class.exe CXXFLAGS = $(CXXINCS) CFLAGS = $(INCS)-DBCCWIN -DDAVE_LITTLE_ENDIAN RM = rm -f .PHONY: all all-before all-after clean clean-custom all: all-before S7Nodave_Class.exe all-after clean: clean-custom clean: $(RM) $(OBJ) $(BIN) $(BIN): $(OBJ) $(CPP) $(LINKOBJ) -o "S7Nodave_Class.exe" $(LIBS) openSocketw.obj: openSocketw.c $(CC) -c openSocketw.c -o openSocketw.obj $(CFLAGS) nodave.obj: nodave.c $(CC) -c nodave.c -o nodave.obj $(CFLAGS) S7Item.obj: S7Item.cpp D:/Dev-Cpp/include/c++/3.4.2/iostream $(CPP) -c S7Item.cpp -o S7Item.obj $(CXXFLAGS) S7Station.obj: S7Station.cpp $(CPP) -c S7Station.cpp -o S7Station.obj $(CXXFLAGS) main.obj: main.cpp $(CPP) -c main.cpp -o main.obj $(CXXFLAGS)
Danke und Gruß
Thomas
-
Blind geraten: Versuch' mal, den C-Header in einen 'extern "C"'-Block einzuklemmen (das sollte die Namenserweiterung und Bindung so festlegen, daß sie zu deiner C-Library passen):
extern "C" { #include "nodave.h" }
Oder alternativ jagst du die Lib auch durch den GCC-Compiler.
-
Hey, das wars schon, funktioniert!
Danke!