Kann nicht auf externe Libraries zugreifen. (krb5.h, g++)



  • Hallo zusammen,

    Ich bin neu und hab auch gleich ein konkretes Problem.

    Aus User-Infos soll ich eine Anfrage bei einem Kerberos-System erstellen. Dazu würde ich die krb5-Libraries verwenden.

    Der Source sieht wie folgt aus:

    #include <iostream> // Wird gebraucht für Ausgabe auf Konsole.
    #include <string> // Führt den Datentyp string ein.
    #include "include/b64/decode.h" // Unser Base64-Decoder.
    #include "include/krb5/krb5.h"
    
    using namespace std;
    
    static const string comparestring = "YIIGUQY";
    
    string Spnego_Extract(string input){
    
    	// 'input' auf Header "YIIGUQY" überprüfen
    	string::size_type i = input.find(comparestring);	
    	if(i != 0){
    		cout << "E: Kein Identifier gefunden." << endl << flush;	
    		return "";
    	}
    
    	// 'input' von Header "YIIGUQY" befreien.
    	input.replace(0, 7, "");
    
    	return input;
    };
    
    string Request_Credentials(string decoded){
    	krb5_context context; // Unser Context, der die Verbindung verwaltet.
    
    	krb5_init_context(&context);
    
    // Hier soll weitere Verarbeitung folgen, wenn obiges funktioniert!	
    
    	return "string";	
    };
    
    string B64_Decode(string extracted){
    	return extracted;
    }
    
    int main(int argc, char **argv)
    {
    	// Prüfen, ob ein Parameter übergeben wurde.
        if(argc != 2){
    	    cout << "E: Es muss ein Parameter übergeben werden." << endl << flush;
    		return -1;
    	}
    
    	string input(argv[1]); // String input wird aus Array argv[1] befüllt.
    
    	// 'input' zerlegen.
    	string extracted = Spnego_Extract(input);
    
    	// 'extracted' B64_Decodieren
    	string decoded = B64_Decode(extracted);
    
    	// 'decoded' an krb5 übergeben und Credentials auswerten
    	string credentials = Request_Credentials(decoded);
    
    	// Credentials in der Form userœdomain ausgeben, wenn alles okay war.
    	if(credentials.empty())
    	{
    		cout << "E: Benutzer konnte nicht authentifiziert werden.";
    	}else{
    		cout << credentials;
    	}	
    
    	return 0;
    };
    

    Auf der Konsole motzt g++ dann wie folgt über das Objekt in Zeile 28:

    g++ -Wall -I/mnt/src/include/ concept.cpp -o concept
    /tmp/ccUSpiRo.o: In function Request\_Credentials(std::basic\_string<char, std::char_traits<char>, std::allocator<char> >)': concept.cpp:(.text+0x211): undefined reference tokrb5_init_context'
    collect2: ld gab 1 als Ende-Status zurück
    make: *** [concept] Fehler 1

    Was mach ich alles falsch?

    Muss dazu sagen, dass ich nach 10 Jahren wieder in C++ einsteige und mich daher vorallem nicht gut mit dem Compiler auskenne, Entwickle sonst in Java, da ist der kompiler mir vertrauter. Vermutlich habe ich nur eine Kleinigkeit verhunzt.

    Bin für jeden Hinweis dankbar!

    MfG, Sascha.


  • Administrator

    Du musst die Bibliothek dazulinken.
    http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Link-Options.html#Link-Options

    -l * library *

    Grüssli


Anmelden zum Antworten