Linker Problem
-
Hallo Leute,
folgendes Problem. Ich will eine Bibliothek in mein Projekt einbinden und bekomme dabei folgende Fehlermeldungen:
dataThread.cpp:47: undefined reference to
iniparser_load(char const*)' dataThread.cpp:52: undefined reference toiniparser_dump(_dictionary_, _IO_FILE)'
dataThread.cpp:57: undefined reference toiniparser\_getstring(\_dictionary_*, char const*, char*)' dataThread.cpp:59: undefined reference toiniparser_getstring(_dictionary_, char const, char*)'
dataThread.cpp:61: undefined reference toiniparser\_getstring(\_dictionary_*, char const*, char*)' dataThread.cpp:63: undefined reference toiniparser_getint(_dictionary_, char const, int)'
dataThread.cpp:66: undefined reference to `iniparser_freedict(_dictionary_*)'
collect2: ld gab 1 als Ende-Status zurück
make: *** [data] Fehler 1Mein Makefile sieht so aus:
CC = g++ -ggdb CFLAGS = -c -Wall INCS = -I "/usr/realtime/include" -I "/usr/local/src/iniparser3.0b/src" OBJ = bin/defines.o LIB = -L "/usr/local/src/iniparser3.0b/" -liniparser -lrt all: data distribution client data: data.o $(OBJ) $(CC) bin/data.o $(OBJ) -o bin/data $(LIB) data.o: dataThread.cpp dataThread.h defines.h $(CC) $(CFLAGS) dataThread.cpp -o bin/data.o $(INCS)in dem Ordner /usr/local/src/iniparser3.0.b/ sind die .so und .a files:
libiniparser.a
libiniparser.so.0also wieso findet er die lib files nicht zum linken?
gruss O.G.Wrapper
-
müsste da nicht sowas in deiner -llibiniparser in den linkerprams stehen, wenn die files libiniparser heißen?
bei dir steht nur -liniparser
-
vlad_tepesch schrieb:
müsste da nicht sowas in deiner -llibiniparser in den linkerprams stehen, wenn die files libiniparser heißen?
bei dir steht nur -liniparserlaut man page nicht
-larchive
--library=archive
Add archive file archive to the list of files to link. This option
may be used any number of times. ld will search its path-list for
occurrences of "libarchive.a" for every archive specified.
-
was ich meine, ist, dass du sagst die archive heißen libiniparser.a und ibiniparser.so.0
du aber die datei iniparser mit -l angibstDabei wundert mich aber dass es keine WArnung oder einen fehler gibt, oder gibt es eine bibliothek iniparser?
Wenn ja, wozu sind da libiniparser.a und ibiniparser.so.0 oder versuchst du hier ein fertiges programm (iniparser) deinem programm hinzuzulinken
?war aber auch nur ne vermutung, ich benutze den gcc nur recht selten und hasse makefiles - es lebe die vs-ide ;-P
-
vlad_tepesch schrieb:
was ich meine, ist, dass du sagst die archive heißen libiniparser.a und ibiniparser.so.0
du aber die datei iniparser mit -l angibstDabei wundert mich aber dass es keine WArnung oder einen fehler gibt, oder gibt es eine bibliothek iniparser?
Wenn ja, wozu sind da libiniparser.a und ibiniparser.so.0 oder versuchst du hier ein fertiges programm (iniparser) deinem programm hinzuzulinken
?war aber auch nur ne vermutung, ich benutze den gcc nur recht selten und hasse makefiles - es lebe die vs-ide ;-P
Das ist eine Bibliothek die ini files parsed und ich versuche die einzubinden. Das Beispiel aus der bibliothek macht das linken genauso nur da funzt es und bei mir nicht

# # iniparser tests Makefile # CC = gcc CFLAGS = -g -I../src LFLAGS = -L.. -liniparser AR = ar ARFLAGS = rcv RM = rm -f default: all all: iniexample parse iniexample: iniexample.c $(CC) $(CFLAGS) -o iniexample iniexample.c -I../src -L.. -liniparser parse: parse.c $(CC) $(CFLAGS) -o parse parse.c -I../src -L.. -liniparser clean veryclean: $(RM) iniexample example.ini parse
-
Hallo,
O.G.Wrapper schrieb:
Das ist eine Bibliothek die ini files parsed und ich versuche die einzubinden. Das Beispiel aus der bibliothek macht das linken genauso nur da funzt es und bei mir nicht
Es gibt aber noch einen entscheidenden Unterschied:
Da iniparser eine C-Bibliothek ist, wird im Beispiel mit dem C-Compiler gearbeitet, du versuchst, den C++-Compiler zu nutzen. Da gibt es aber einiges zu beachten (extern C-Blöcke nutzen), nachzulesen hier:
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html
MfG,
Probe-Nutzer
-
danke, läuft jetzt