我是不是必须安装“libbitcoin-server”才能包含“bitcoin.hpp”?

Posted

技术标签:

【中文标题】我是不是必须安装“libbitcoin-server”才能包含“bitcoin.hpp”?【英文标题】:Do I have to install `libbitcoin-server` to be able to include `bitcoin.hpp`?我是否必须安装“libbitcoin-server”才能包含“bitcoin.hpp”? 【发布时间】:2019-09-02 09:28:14 【问题描述】:

我正在阅读 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: ..."

由于代码库发生了很多变化,因此不清楚如何处理包含。该代码之一不再可用。

【问题讨论】:

为什么要包含它?你需要哪些比特币相关功能?如果它们在那个库中,你还有什么建议可以在没有安装库的情况下编译/运行程序?这个问题太宽泛了,无法真正回答。 我在 github 上的任何相关存储库中都找不到该标头。是哪本书?真的没有多说应该如何获取header吗? 本书是:amazon.com/Mastering-Bitcoin-Unlocking-Digital-Cryptocurrencies/…。代码似乎已经过时了。 【参考方案1】:

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

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

【讨论】:

谢谢,我对此比较陌生。 github.com/libbitcoin/libbitcoin-system 不是 libbitcoin-server 吗?我有点困惑,因为两者都有相同的父级但安装建议不同。 libbitcoin-server 依赖于 libbitcoin-system。如果你只需要那个头文件(以及它附带的任何代码),你应该能够只使用 libbitcoin-system。 我刚刚意识到,尽管有不同的 git 站点,但它们实际上都有相同的安装建议并引用相同的 wget 源。现在我必须弄清楚为什么它让我的树莓崩溃了。 :) 想必就是帮助人们安装全套库。我将您链接到“高级用户的自动工具”部分,该部分仅用于安装 -system 库。【参考方案2】:

我需要安装的是库 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

由于缺少无法正确链接的依赖项,因此仅按照另一个答案中的建议安装其中的一部分对我不起作用。


关于swap,我可以说它在外置硬盘上的 4GB 交换文件上运行良好,尽管 RPi2 只有 20MB/s 的有效带宽。


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

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

【讨论】:

以上是关于我是不是必须安装“libbitcoin-server”才能包含“bitcoin.hpp”?的主要内容,如果未能解决你的问题,请参考以下文章

--enable-phar=shared 我是不是必须重新编译 PHP 才能安装 Composer?

如何检查是不是默认安装了 Python 包,或者我们是不是必须使用 PIP 安装它 [重复]

.net c# VS发布后 必须联网? 很着急

Eclipse 是不是必须处理 C++ ABI 兼容性问题?

iPhone手机使用广播是不是必须安装第三方软件以及如何收费?

检查是不是安装了应用程序