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 to iniparser\_getstring(\_dictionary_*, char const*, char*)' dataThread.cpp:59: undefined reference toiniparser_getstring(_dictionary_, char const, char*)'
    dataThread.cpp:61: undefined reference to iniparser\_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 1

    Mein 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.0

    also 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 -liniparser

    laut 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 angibst

    Dabei 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 angibst

    Dabei 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


Anmelden zum Antworten