Snap lib problem



  • Ich versuche mit der Lib snap zu arbeiten bekomme jetzt aber schon gleich einen dummen Fehler *grml* und zwar :

    /tmp/ccj0A5Ug.o: In function TCRef::~TCRef()': network.cpp:(.text._ZN5TCRefD1Ev[TCRef::~TCRef()]+0x39): undefined reference toExeStop(char const*, char const*, char const*, char const*, int const&)'
    /tmp/ccj0A5Ug.o: In function TCRef::UnRef()': network.cpp:(.text._ZN5TCRef5UnRefEv[TCRef::UnRef()]+0x39): undefined reference toExeStop(char const*, char const*, char const*, char const*, int const&)'
    collect2: ld returned 1 exit status

    code ziemlich simpel:
    #include "network.h"
    #include <iostream>
    #include "snap/stdafx.h"

    using namespace std;

    Network::Network() {
    // TODO Auto-generated constructor stub

    }

    int Network::read_data(char *input_file[])
    {
    cout << input_file[1] << endl;
    //Read inputfile
    PNGraph Graph = TNGraph::New();

    Ich denke es ist ein Problem der Einbindung der Bibliotheken, in welcher Reihenfolge usw.
    Aber wenn, dann weiss ich nicht wie ich das beheben kann. Hoffe ihr könnt mir helfen.

    LG



  • Hast Du die *.lib bzw. *.a Datei dem Linker angegeben?
    Ich nehme an die TCRef Klasse gehört zur Library, oder?



  • Ja die Klasse gehört zu der Lib.

    Ok wie gebe ich sie dem Linker an????
    Hatte noch nie solch ein prob :(.

    LG



  • Mit welcher IDE arbeitest Du?



  • Eclipse ... compiliere aber alles über console ... linux



  • Mit GCC nehme ich an - da muss Dir wer anders helfen oder Du list das GCC Manual / Man Page wie Du Libraries dazulinkst.



  • ich arbeite aber mit g++ ... hmm



  • movco schrieb:

    ich arbeite aber mit g++ ... hmm

    GCC ist schon lange nicht mehr der "Gnu C Compiler", sondern die "Gnu Compiler Collection". Der g++ ist Teil der GCC.

    Zum Angeben der lib "-lname", wenn die lib "libname.so" ist.
    Ggf. musst du den Ort, wo die lib liegt, noch mit angeben - "-L/Pfad/zum/dir"
    So kann dann ein Aufruf ausschauen:

    g++ file.cpp -L/home/ich/libs/ -lsnap -o file_exe
    

    (Wenn deine libsnap.so in /home/ich/libs liegt)



  • Falls es eine .a Datei ist: Die muss man wie eine normale Code-Datei angeben, nicht als Library Linken. Also z.B.

    g++ --std=c++0x -Wall -O3 main.cpp mylib.a -o program



  • hmm stimmt ich hab es jetzt mit dem kompiliert:

    g++ -lrt -o main main.cpp Snap.o -Iglib -Isnap

    bekomme jetzt aber den Error:

    /tmp/ccNzxNKp.o: In function main': main.cpp:(.text+0x97): undefined reference toInterface::Interface()'
    main.cpp:(.text+0xa3): undefined reference to Network::Network()' main.cpp:(.text+0xaf): undefined reference toInterface::welcome()'
    main.cpp:(.text+0xc2): undefined reference to Network::read_data(char**)' main.cpp:(.text+0xd3): undefined reference toNetwork::~Network()'
    main.cpp:(.text+0xe6): undefined reference to Network::~Network()' main.cpp:(.text+0xfa): undefined reference toInterface::~Interface()'
    main.cpp:(.text+0x10d): undefined reference to `Interface::~Interface()'
    collect2: ld returned 1 exit status

    /tmp/ccNxxNKp.o ?



  • Natürlich musst Du auch network.cpp kompilieren und linken.



  • und wie?
    Hab schon ewig net mehr mit dem gearbeitet 😞 😞 😞



  • Mit wem?



  • mit g++ und einbinden der cpp dateien beim compilieren ... arbeite immer mit g++ *.cpp ;).
    War jetzt lange im Krankenhaus, hab ne Entzündung im Schädel die mir viel Wissen zerstört hat :(.

    LG



  • Habs lol war ne dumme Frage 😃

    g++ -lrt -o main *.cpp Snap.o -Iglib -Isnap

    LG und danke für eure Hilfe


Anmelden zum Antworten