1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Linker error

  • insomniac
  • 26. Juli 2005 um 01:47
  • Unerledigt
  • insomniac
    4
    insomniac
    Mitglied
    Punkte
    130
    Beiträge
    19
    • 26. Juli 2005 um 01:47
    • #1

    Hallo,
    ich habe mit DevCpp eine lib erstellt (mylib.a) & diese in das richtige verzeichnis gestellt.
    die benötigten *.h habe ich nach /mylib/include kopiert.
    wenn ich nun die lib verwenden möchte kommt bei jeder funktion aus der lib die Meldung:

    Code
    In function 'xyz-kryptische alphanumerische folge'
      [Linker error] undefined reference to `name-meiner-funktion'

    komischerweise hat das ganze beim Testen (lib-quelltext in einem projekt mit main() ) ohne probleme funktioniert.

    wenn jemand eine Idee hat was ich falsch gemacht habe wäre das super!

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 26. Juli 2005 um 09:12
    • #2

    hast du *.h im cpp file inkludiert?
    hast du das verzeichnis wo *.h liegt beim compilieren angegeben
    hast du die lib zum linken angegeben
    hast du das verzeichnis wo *.a liegt beim linken angegeben

    schlage vor du compilierst zuerst mal nur und dann seperat linken, wenn das funkt dann sinds die ersten zwei schon mal nicht.

    david

    I like Toast!

  • insomniac
    4
    insomniac
    Mitglied
    Punkte
    130
    Beiträge
    19
    • 26. Juli 2005 um 13:41
    • #3

    danke,
    aber leider so einfach hat sich das nicht lösen lassen, hier mal das makefile:

    Code
    CPP  = g++.exe
    CC   = gcc.exe
    WINDRES = windres.exe
    RES  = 
    OBJ  = main.o $(RES)
    LINKOBJ  = main.o $(RES)
    LIBS =  -L"C:/Programme/Dev-Cpp/lib" 
       -L"C:/Programme/Dev-Cpp/lib/mylibs"  
    INCS =  -I"C:/Programme/Dev-Cpp/include"  
       -I"C:/Programme/Dev-Cpp/include/mylibs" 
    CXXINCS =  -I"C:/Programme/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  
    	-I"C:/Programme/Dev-Cpp/include/c++/3.4.2/backward"  
    	-I"C:/Programme/Dev-Cpp/include/c++/3.4.2/mingw32"  
    	-I"C:/Programme/Dev-Cpp/include/c++/3.4.2"  
    	-I"C:/Programme/Dev-Cpp/include"  
    	-I"C:/Programme/Dev-Cpp/include/mylibs" 
    BIN  = Test.exe
    CXXFLAGS = $(CXXINCS)  
    CFLAGS = $(INCS)  
    RM = rm -f
    
    
    .PHONY: all all-before all-after clean clean-custom
    
    
    all: all-before Test.exe all-after
    
    
    clean: clean-custom
    	${RM} $(OBJ) $(BIN)
    
    
    $(BIN): $(OBJ)
    	$(CPP) $(LINKOBJ) -o "Test.exe" $(LIBS)
    
    
    main.o: main.cpp
    	$(CPP) -c main.cpp -o main.o $(CXXFLAGS)
    Alles anzeigen

    mylib ist das verzeichnis meiner Header, sowie der lib.

    Interessant ist auch das mir für einen einmal verwendeten Destruktor gleich dreimal der Linker error angezeigt wird.

    Kann das problem dadurch entstehen das ich 2 headerdateien für 1 lib verwende?

    edit: Hab das ausprobiert, auch wenn ich nur eine *.h verwende, und diese genauso heist wie meine *.a kommt der gleiche fehler -> eigentlich eh klar.:coolsmile

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 26. Juli 2005 um 14:00
    • #4

    Wenn sich der gcc unter DOS gleich verhält wie unter Unix (was ich stark annehme), dann brauchst du nicht nur -L, sondern auch -l.
    -L gibt an, wo nach Libraries gesucht werden soll, aber *welche* Libraries du wirklich verwenden willst, mußt du auch noch extra mit -l angeben. Also wenn dein File libfoo.a heißt, dann tu noch -lfoo dazu. Wenn der Name des Files nicht wie übrlich mit lib anfängt, brauchst du noch irgendeinen zusätzlichen Flag.

    *plantsch*

  • insomniac
    4
    insomniac
    Mitglied
    Punkte
    130
    Beiträge
    19
    • 26. Juli 2005 um 15:06
    • #5

    ok es funktioniert,
    habe einfach die lib umbenannt (libxxxx.a). und an die Zeile LIBS="xxxxx/mylib" noch ' -lxxx ' angehängt.

    danke

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung