编译bfx-cpp-api - 字节数据类型未声明

时间:2017-11-27 11:38:51

标签: c++ gnu crypto++

所以我希望使用示例代码编译这个项目https://github.com/MMquant/bfx-cpp-api。我已经包含了读给我建议的cryptopp文件。可在此处找到:https://github.com/weidai11/cryptopp

我正在使用Ubutnu版本17.10和GNU编译器。

以下是我编译的方式:

g++ example.cpp BitfinexAPI.cpp BitfinexAPI.hpp  -Icryptopp -I.  -o a -w -std=c++17

BitFinex支持破解代码似乎很奇怪,所以我很确定这个问题必须是我正在做的事情。

我得到的错误与第936行有关,其中未声明数据类型“byte”。我的预测是我错过了某个地方的头文件,但任何帮助都会受到赞赏。

$ g++ example.cpp BitfinexAPI.cpp BitfinexAPI.hpp  -Icryptopp -I.  -o a -w -std=c++17
BitfinexAPI.cpp: In static member function ‘static int BitfinexAPI::getBase64(const string&, std::__cxx11::string&)’:
BitfinexAPI.cpp:936:5: error: ‘byte’ was not declared in this scope
     byte buffer[1024] = {};
     ^~~~
BitfinexAPI.cpp:936:5: note: suggested alternative:
In file included from ../cryptopp/seckey.h:9:0,
                 from ../cryptopp/hmac.h:9,
                 from BitfinexAPI.cpp:37:
../cryptopp/config.h:222:23: note:   ‘CryptoPP::byte’
 typedef unsigned char byte;
                       ^~~~
BitfinexAPI.cpp:940:9: error: ‘buffer’ was not declared in this scope
         buffer[i] = content[i];
         ^~~~~~
BitfinexAPI.cpp:940:9: note: suggested alternative: ‘setbuffer’
         buffer[i] = content[i];
         ^~~~~~
         setbuffer
BitfinexAPI.cpp:943:21: error: ‘buffer’ was not declared in this scope
     StringSource ss(buffer, content.length(), true, new Base64Encoder( new StringSink(encoded), false));
                     ^~~~~~
BitfinexAPI.cpp:943:21: note: suggested alternative: ‘setbuffer’
     StringSource ss(buffer, content.length(), true, new Base64Encoder( new StringSink(encoded), false));
                     ^~~~~~
                     setbuffer
BitfinexAPI.cpp: In static member function ‘static int BitfinexAPI::getHmacSha384(const string&, const string&, std::__cxx11::string&)’:
BitfinexAPI.cpp:963:33: error: ISO C++ forbids declaration of ‘type name’ with no type [-fpermissive]
     SecByteBlock byteKey((const byte*)key.data(), key.size());
                                 ^~~~
BitfinexAPI.cpp:963:27: error: expected primary-expression before ‘const’
     SecByteBlock byteKey((const byte*)key.data(), key.size());
                           ^~~~~
BitfinexAPI.cpp:963:27: error: expected ‘)’ before ‘const’

1 个答案:

答案 0 :(得分:2)

有点棘手,但我(想想?)发现了它。 byte代码在cryptopp代码中定义:

https://github.com/weidai11/cryptopp/blob/master/config.h

第222行。所以我猜你的系统上的config.h是不存在的,可能是因为你没有正确安装标头。一个常见的问题是拥有库

sudo apt-get install libcrypto++

但遗漏了开发者文件(特别是标题)

sudo apt-get install libcrypto++-dev

我不是100%关于软件包名称(Debian用户),但应尽量接近。

来自JTejedor的好消息

似乎加密人员在他们的定义周围放置了一个名称空间,以免与std::byte发生冲突。您可能希望在bfx(第936行)中的字节定义中添加CryptoPP::,如果这样可以为那些人打开一个错误(或请求拉动)。