我是不是必须安装“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 && configure && make && 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
系统以及所有依赖项,例如boost
和 secp256k1
它还安装了 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 安装它 [重复]
Eclipse 是不是必须处理 C++ ABI 兼容性问题?