我是否必须安装 `libbitcoin-server` 才能包含 `bitcoin.hpp`?

Do I have to install `libbitcoin-server` to be able to include `bitcoin.hpp`?

我正在阅读 Antonopoulos 的《精通比特币》一书,并想从中编译一个示例 book。它没有说明需要安装哪个 C++ 库才能使 #include <bitcoin/bitcoin.hpp> 正常工作。

#include <bitcoin/bitcoin.hpp>

int main()
{
    // Private secret key.
    bc::ec_secret secret;
    bool success = bc::decode_base16(secret,
        "038109007313a5807b2eccc082c8c3fbb988a973cacf1a7df9ce725c31b14776");
    assert(success);
    // Get public key.
    bc::ec_point public_key = bc::secret_to_public_key(secret);
    std::cout << "Public key: " <> bc::encode_hex(public_key) << std::endl;
    
    // Create Bitcoin address.
    // ... further comments
    
    // Compute hash of public key for P2PKH address.
    const bc::short_hash hash = bc::bitcoin_short_hash(public_key);
    
    bc::data_chunk unencoded_address;
    // Reserve 26 bytes
    // ...
    unencoded_address.reseve(25);
    unencoded_address.push_back(0);
    bc::extend_data(unencoded_address, hash);
    bc::append_checksum(unencoded_address);
    assert(unencoded_address.size() == 25);
    const std::string address = bc::encode_base58(unencoded_address);
    
    std::cout << "Address: " << address << std::endl;
    return 0;
}

编译应该这样进行:

g++ -o addr addr.cp $(pkg-config --cflags --libs libbitcoin)

运行 ./addr 应该给出输出:

"Public key: ..."
"Address: ..."

由于对代码库进行了大量更改,因此不清楚如何处理包含。代码之一不再可用。

提交 libbitcoin/libbitcoin-system 存储库的 83f36c901a3f45e8ab667f1db283d72e75a58176bitcoin/bitcoin.hpp 重命名为 bitcoin/system.hpp

看起来您只需 install 使用典型的 ./autogen.sh && configure && make && make install 步骤即可。之后,您可以创建 bitcoin/system.hpp 的副本或修改您的客户端代码。

我需要安装的是库 libbitcoin 或更准确地说是“比特币跨平台 C++ 开发工具包” libbitcoin-system

但是因为解决这个问题的最好方法是使用来自 here 的 debian 自动安装脚本:

$ sudo apt-get install build-essential autoconf automake libtool pkg-config git
$ wget https://raw.githubusercontent.com/libbitcoin/libbitcoin/version3/install.sh
$ chmod +x install.sh
$ ./install.sh --prefix=/home/me/myprefix --build-boost --disable-shared

这安装了整个 libbitcoin 系统以及所有依赖项,例如boostsecp256k1 它还安装了 libbitcoin-server.

按照另一个答案中的建议安装它的一部分对我不起作用,因为缺少依赖项,我无法正确地 link。


关于 swap 我可以说它在外部硬盘驱动器上使用 4GB 交换文件时工作正常,尽管 RPi2 的有效带宽只有 20MB/s。


为了能够使用该库,我必须在编译我的程序时提供 --static 属性:

g++ -o addr 69_addr2.cpp $(pkg-config --cflags --libs --static libbitcoin)