首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将tomsfastmath数学链接到libtomcrypt

无法将tomsfastmath数学链接到libtomcrypt
EN

Stack Overflow用户
提问于 2012-12-09 07:34:22
回答 2查看 2.6K关注 0票数 6

我正在使用libtomcrypt C库的RSA和SPRNG函数用c++编写一个安全的即时消息传递程序。我将libtomcrypt编译为静态库,并且我能够链接到它并运行sprng函数,并查看和使用它生成的随机数据。

我遇到的问题是试图使用rsa_make_key()函数,它依赖于一个链接的数学库来实现函数。

在本例中,我尝试使用Tomsfastmath (tfm),我也尝试将其链接为静态库。这两个库都位于它们自己的项目文件夹中,比我的项目文件夹高一个目录(即../libtomcrypt)

在我的代码中,当我试图访问tomsfast数学描述符"tfm_desc“时,我得到了错误test_crypt.cpp:8:11: error: 'tfm_desc' was not declared in this scope。这让我认为tfm没有正确地链接到libtomcrypt。我已经阅读了这两件事的文档,它不是很清楚。

我在这里束手无策。我做错了什么?

这是我的make文件

代码语言:javascript
复制
 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 $@

 .cpp.o:
      $(CPP) $(CPPFLAGS) -c $< -o $@

  $(BINARY): $(COBJETS) $(CPPOBJECTS)
      $(CPP) $(CPPFLAGS) $(COBJECTS) $(CPPOBJECTS) -o $@ $(LDFLAGS)

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

下面是我的test_crypt函数

代码语言:javascript
复制
#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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-09 11:45:41

-DTFM_DESC添加到makefile的CFLAGSCPPFLAGS变量中,这样头文件就会将tfm_desc声明为extern变量。

然后,应该从库中拉出tfm_desc变量。

票数 0
EN

Stack Overflow用户

发布于 2012-12-09 08:44:10

您需要在test_crypt文件中包含相关的头文件。

我错误地指出,您需要在早些时候包含tfm.h。您应该改为使用#include "tomcrypt.h",因为它应该为您提供所需的常量。

为了澄清melpomene所说的,你的问题是你没有包括正确的头,这导致编译器正确地告诉你你正在使用的标识符没有声明。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13783079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档