我下载了crypto ++ 5.6.2(zip文件)并使用make
构建了它(我有gcc 4.8.1)。它似乎工作,并给了我一个libcryptopp.a
文件。
现在,为了测试设置,我尝试编译随下载提供的test.cpp
文件(链接在这里:http://www.cryptopp.com/docs/ref/test_8cpp_source.html)。
首先,我用
编译它 g++ -Wall -std=c++11 -g -Iinclude -I/c/libraries/cryptopp562 -c test.cpp -o obj/test.o
提出了很多警告(主要是弃用和未使用的变量),但是工作正常,我得到了test.o
文件。
现在,为了链接它,我使用了
g++ obj/test.o -o bin/test -L/c/libraries/cryptopp562 -lcryptopp
但这会导致很多undefined reference
错误并失败。
例如
D:\.../test.cpp:119: undefined reference to `RegisterFactories()'
但是当你查看test.cpp
文件(http://www.cryptopp.com/docs/ref/test_8cpp_source.html)时,只有RegisterFactories()
的声明,但没有定义。这是否意味着,需要从图书馆中找到它? (在这种情况下不需要本地声明,不是吗?)
好的,那么我需要做些什么来让整个图书馆工作?使用gmake
构建它?或者使用较旧的gcc
?或者我的编译/链接命令可能不正确?
答案 0 :(得分:2)
设置crypto ++
在Linux下设置Crypto ++的说明在Build and Install the Library的维基上。
...为了测试设置,我尝试编译
test.cpp
...
如果您想构建测试套件,则运行make cryptest.exe
。
如果要在构建测试套件后运行它,请运行./cryptest.exe v
。
undefined reference to RegisterFactories()
测试套件中使用了9个源文件。他们是:
...我需要做些什么来让整个图书馆工作?
make cryptest.exe
和./cryptest.exe v
通常可以正常工作:)
我通常运行make static dynamic cryptest.exe
来构建静态存档和共享对象。
您还可以使用tv
命令运行单个测试。例如,./cryptest.exe tv sha1
将运行与SHA-1相关的测试。 tv
是“测试向量”,它们位于源的“TestVectors”目录中。
相关,如果您希望测试套件在安装后运行,那么您将需要DataDir Patch。
它是由社区提供的补丁。它不是Crypto ++库的一部分(尽管它可能应该是库的一部分)。
答案 1 :(得分:0)
test.cpp不是自包含的。它使用了很多其他文件。实际上它已经在构建中使用(参见GNUmakefile)。构建之后,生成libcryptopp.a和cryptest.exe。 test.cpp用于构建cryptest.exe。
您提到的具体功能在regtest.cpp中定义。它还在其他C ++文件中使用了许多其他函数。