2012-12-08 9 views
6

Ich schreibe ein sicheres Instant-Messaging-Programm in C++ mit der Bibliothek libtomcrypt C für seine RSA- und SPRNG-Funktionen. Ich habe libtomcrypt kompiliert als eine statische Bibliothek und ich war in der Lage, mit ihm zu verknüpfen und die Sprng-Funktionen ausführen und sehen und verwenden Sie die zufälligen Daten, die es generiert.Ich kann tomsfastmath nicht in libtomcrypt einbinden

Das Problem, das ich habe, versucht, die rsa_make_key() -Funktion zu verwenden, die Abhängigkeiten zu einer verknüpften Math-Bibliothek zu funktionieren hat.

In diesem Fall versuche ich Tomsfastmath (tfm) zu verwenden, die ich auch versuche, als eine statische Bibliothek zu verknüpfen. Beide Bibliotheken befinden sich in ihrem eigenen Projektordner, ein Verzeichnis oberhalb meines Projektordners (zB ../libtomcrypt)

In meinem Code bekomme ich den Fehler test_crypt.cpp:8:11: error: 'tfm_desc' was not declared in this scope, wenn ich versuche, auf den tomsfast Mathedeskriptor "tfm_desc" zuzugreifen. Das lässt mich denken, dass tfm nicht korrekt in libtomcrypt eingebunden wird. Ich habe die Dokumentation für diese beiden Dinge gelesen, es ist nicht sehr klar.

Ich bin am Ende hier. Was mache ich falsch?

Hier ist mein Make-Datei

CC:=gcC#C Compiler 
CFLAGS:=-std=c99 -O0 -I/home/k3rb3ros/csci484-CMU-/libtomcrypt-1.17/src/headers -g -  Wall -Wextra#C Compiler flags 
CPP:=g++ #C++ Compiler 
CPPFLAGS:=-std=gnu++0x -O0 -I/home/k3rb3ros/csci484/csci484-CMU-/libtomcrypt- 1.17/src/headers -L. -g -Wall -Wextra#C++ Compiler flags 
#CPPFLAGS:=-std=gnu++0x -O0 -g -Wall -Wextra #C++ Compiler flags 
LDFLAGS:= -lSDL -lSDL_net -ltfm -ltomcrypt 
CSOURCES= #C files used in this program 
CPPSOURCES=connection.cpp chat.cpp test_crypt.cpp #CPP files used in this prgram 
#COBJECTS=$(CSOURCES:.c=.o)libtfm.a libtomcrypt.a 
COBJECTS=$(CSOURCES:.c=.o) 
CPPOBJECTS=$(CPPSOURCES:.cpp=.o) 
BINARY=down_low 

all: $(BINARY) $(COBJECTS) $(CPPOBJECTS) 
.c.o: 
     $(CC) $(CFLAGS) -c $< -o [email protected] 

.cpp.o: 
     $(CPP) $(CPPFLAGS) -c $< -o [email protected] 

    $(BINARY): $(COBJETS) $(CPPOBJECTS) 
     $(CPP) $(CPPFLAGS) $(COBJECTS) $(CPPOBJECTS) -o [email protected] $(LDFLAGS) 

    clean: 
    rm -rv $(BINARY) $(COBJECTS) $(CPPOBJECTS) 

und hier ist meine test_crypt Funktion

#include "headers/test_crypt.h" 
using namespace std; 

void test_crypt() 
{ 
    int err = 0; 
    int rng_idx = -1; //rng index, not sure if I need this 
    ltc_mp = tfm_desc; //tell tomcrypt to use toms fast math 
    rsa_key pub_key; 
    prng_state random_gen; 

    if((err = sprng_start(&random_gen)) != CRYPT_OK) //start the rng and check for errors 
    { 
     cout << "start error " << error_to_string(err) << endl; 
    } 

    rng_idx = find_prng("sprng"); 
    if((err = sprng_ready(&random_gen)) != CRYPT_OK) 
    { 
     cout << "Ready error " << error_to_string(err) << endl; 
    } 

    //test toms fast math present and working 
    //fp_int test; 
    //fp_init(&test); 

    //sprng_read(entropy, size, &random_gen); 

    /* 
    if((err = rsa_make_key(NULL,   //PRNG state 
          rng_idx,  //PRNG idx 
          1024/8,   //Size of key 
          65537,   //e 
          &pub_key)  //RSA key 
          ) != CRYPT_OK) //if conditon test 
    { 
     cout << "RSA Key Generation error " << error_to_string(err) << endl; 
    } 
    rsa_free(&pub_key); //free the key when we are done with it; 
    */ 
    sprng_done(&random_gen); //done generating random numbers 
} 
+1

Das ist ein Compiler-Fehler, kein Linker-Fehler. – melpomene

Antwort

0

hinzufügen -DTFM_DESC zu Ihrem Makefile CFLAGS und CPPFLAGS Variablen so die Header tfm_desc als extern Variable deklarieren wird.

Die Variable tfm_desc sollte dann aus der Bibliothek abgerufen werden.

+0

Als Randnotiz möchten Sie vielleicht 'CPPFLAGS' in' CXXFLAGS' umbenennen. 'CPPFLAGS' wird oft verwendet, um Optionen für den C-Präprozessor zu konfigurieren; 'CXXFLAGS' wird oft für C++ verwendet. –

+0

Ich konnte meinen Code kompilieren, indem ich -DTFM_DESC zu CPP hinzufügte (sollte CXX-Flags sein) und fixiere die -L, die auf den falschen Ordner zeigt. Danke für Ihre Hilfe. Normalerweise sind Makefiles großartig, aber dieses Projekt ist außer Kontrolle geraten. – K3rb3ros

0

Sie müssen die entsprechenden Header in Ihrer test_crypt Datei aufzunehmen.

Ich habe fälschlicherweise angegeben, dass Sie früher tfm.h einschließen müssten. Sie sollten #include "tomcrypt.h" stattdessen, wie es Ihnen die Konstante zur Verfügung stellen sollte, die Sie benötigen.

Um zu klären, was Melpomene gesagt hat, ist Ihr Problem, dass Sie nicht die richtigen Header enthalten, was den Compiler dazu bringt, Ihnen korrekt zu sagen, dass der von Ihnen verwendete Bezeichner nicht deklariert ist.

+0

ist in der Datei myheader enthalten Ich wünschte, die Lösung wäre so einfach, aber hier läuft noch etwas anderes. – K3rb3ros

Verwandte Themen