==尽量采用高版本的Ubuntu内核版本或GCC版本==
git clone -b https://github.com/hyperledger/iroha
环境配置
sudo apt-get install build-essential python-software-properties automake libtool \
libssl-dev zlib1g-dev libc6-dbg golang \
ca-certificates lcov cmake iputils-ping ccache gcovr vera++\
cppcheck doxygen graphviz graphviz-dev libgtest-dev libgflags-dev
cmake
# 下载 cmake 安装脚本
wget https://cmake.org/files/v3.10/cmake-3.10.3-Linux-x86_64.sh
# 安装
sudo sh cmake-3.10.3-Linux-x86_64.sh
# 根据提示选择安装路径
# 配置环境变量 修改 .bashrc
vim ~/.bashrc
export PATH="/cmake/install/path/bin:$PATH"
# 加载环境变量
source ~/.bashrc
boost
==注: Boost v1.65运行正常, v1.66运行 coredump==
# download boost
wget https://dl.bintray.com/boostorg/release/1.65.0/source/boost_1_65_0.tar.gz
# 编译
./bootstrap.sh --with-libraries=system,filesystem
./b2
libcares
# 编译安装
wget https://c-ares.haxx.se/download/c-ares-1.14.0.tar.gz
./configure
make && sudo make install
protobuf
# 编译添加fPIC 解决静态库依赖错误
./configure CXXFLAGS=-fPIC
make && sudo make install
==注: 编译Google全家桶时,修改gcc 版本对应的cplusplus c++config.h
文件中的宏 _GLIBCXX_USE_CXX11_ABI
为0 ; 例如: /usr/include/x86_64-linux-gnu/c++/6/bits/c++config.h
; 否则后续编译可能会出现 动态库引用 undefined==
# 安装依赖包
sudo apt-get install libgoogle-perftools-dev build-essential\
autoconf libtool pkg-config
# 下载最新代码包
git clone https://github.com/grpc/grpc.git
git submodule update --init
make && sudo make instal
若GCC版本过低可能会遇见如下问题:
# grpc_cpp_plugin 运行 coredump
terminate called after throwing an instance of 'std::system_error
解决方案, 修改Makefile, 添加 -Wl,--no-as-needed
编译参数, 具体参考Stackoverflow: terminate called after throwing an instance of ‘std::system_error’
379 ifeq ($(SYSTEM),Linux)
380 LIBS = dl rt m pthread
381 LDFLAGS += -pthread -Wl,--no-as-needed
382 endif
383
384 ifeq ($(SYSTEM),MINGW32)
385 LIBS = m pthread ws2_32
386 LDFLAGS += -pthread
387 endif
编译
# 运行 cmake 生成 build 文件; binaries package cmake 添加参数 -DPACKAGE_ZIP=ON
borey-zhu@AWS-TEST-DT:~/blockchain/iroha$ cmake -H. -DCMAKE_BUILD_TYPE=Release -Bbuild
-- The C compiler identification is GNU 6.3.0 -- The CXX compiler identification is GNU 6.3.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- -DCMAKE_BUILD_TYPE=Release -- -DTESTING=ON -- -DBENCHMARKING=OFF -- -DFUZZING=OFF -- -DCOVERAGE=OFF -- -DPACKAGE_ZIP=OFF -- -DPACKAGE_TGZ=OFF -- -DPACKAGE_RPM=OFF -- -DPACKAGE_DEB=OFF -- -DENABLE_LIBS_PACKAGING=ON -- -DSWIG_PYTHON=OFF -- -DSWIG_JAVA=OFF -- -DSUPPORT_PYTHON2=OFF -- -DSWIG_CSHARP=OFF -- -DSHARED_MODEL_DISABLE_COMPATIBILITY=OFF
# 缺失包 https://github.com/google/googletest
-- Could NOT find gtest (missing: gtest_LIBRARY gtest_MAIN_LIBRARY gmock_INCLUDE_DIR gmock_LIBRARY gmock_MAIN_LIBRARY)
# 缺失包 https://github.com/gabime/spdlog.git
-- Could NOT find spdlog (missing: spdlog_INCLUDE_DIR) -- Found protobuf: /usr/local/include -- Found grpc: /usr/local/lib/libgrpc.so
# 缺失包 https://github.com/miloyip/rapidjson.git
-- Could NOT find rapidjson (missing: rapidjson_INCLUDE_DIR)
# 缺失包 https://git.postgresql.org/git/postgresql.git
-- Could NOT find pq (missing: pq_INCLUDE_DIR postgres_INCLUDE_DIR pq_LIBRARY pg_config_EXECUTABLE)
# 缺失包 https://github.com/jtv/libpqxx.git
-- Could NOT find pqxx (missing: pqxx_INCLUDE_DIR pqxx_LIBRARY)
# 缺失包 https://github.com/Reactive-Extensions/rxcpp.git
-- Could NOT find rxcpp (missing: rxcpp_INCLUDE_DIR)
# 缺失包 https://github.com/01org/tbb.git
-- Could NOT find tbb (missing: tbb_INCLUDE_DIR tbb_LIBRARY) -- Boost version: 1.65.0 -- Found the following Boost libraries: -- filesystem -- system
# 缺失包 https://github.com/hyperledger/iroha-ed25519
-- Could NOT find ed25519 (missing: ed25519_INCLUDE_DIR ed25519_LIBRARY) -- Configuring done -- Generating done -- Build files have been written to: /home/borey-zhu/blockchain/iroha/build
# 对依赖进行下载编译
cd build && make -j4
#或进行对上述依赖包进行独立安装
cmake -H. -DBOOST_ROOT=/home/prod/softwares/boost_1_65_0/ \
-Dpostgres_INCLUDE_DIR=/usr/local/pgsql/include/ \ -Dpq_INCLUDE_DIR=/usr/local/pgsql/include/libpq/ \ -Dpq_LIBRARY=/usr/local/pgsql/lib/libpq.so \ -Dpg_config_EXECUTABLE=/usr/local/pgsql/bin/ \ -Dtbb_INCLUDE_DIR=/home/prod/softwares/tbb/include/ \ -Dtbb_LIBRARY=/usr/local/lib/libtbb.so \ -Bbuild
prod@AWS-TEST-DT:~$ sudo groupadd postgres
prod@AWS-TEST-DT:~$ sudo useradd postgres -g postgres
$ mkdir pgdata
$ mkdir pglog
prod@AWS-TEST-DT:/extdisk1/postgres$ sudo su - postgres
No directory, logging in with HOME=/
$ cd /extdisk1/
$ mkdir -p postgres/pgdata
$ mkdir -p postgres/pglog
$ /usr/local/pgsql/bin/initdb -D /extdisk1/postgres/pgdata/ -E UTF8 --locale=C
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /extdisk1/postgres/pgdata ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/usr/local/pgsql/bin/pg_ctl -D /extdisk1/postgres/pgdata/ -l logfile start
# start server
$ /usr/local/pgsql/bin/pg_ctl -D /extdisk1/postgres/pgdata/ -l /extdisk1/postgres/pglog/pg.log start
waiting for server to start.... done
server started
# stop server
$ /usr/local/pgsql/bin/pg_ctl -D /extdisk1/postgres/pgdata/ -l /extdisk1/postgres/pglog/pg.log stop
waiting for server to shut down.... done
server stopped
# 修改密码
$ /usr/local/pgsql/bin/psql -U postgres
psql (11devel)
Type "help" for help.
postgres=# help
You are using psql, the command-line interface to PostgreSQL.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
postgres=# alter user postgres with password '123456';
ALTER ROLE
postgres=# \q
# 修改文件 pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all md5
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
# 配置节点
echo 'localhost:10001' > peers.list
# 生成创世块 和 对应的密钥对
iroha-cli --genesis_block --peers_address peers.list
# 生成如下列文件
borey-zhu@AWS-TEST-DT:~/ext_data/iroha/conf$ ls -l
total 36
-rw-rw-r-- 1 borey-zhu borey-zhu 64 Mar 27 14:26 admin@test.priv
-rw-rw-r-- 1 borey-zhu borey-zhu 64 Mar 27 14:26 admin@test.pub
-rw-rw-r-- 1 borey-zhu borey-zhu 4027 Mar 27 14:26 genesis.block
-rw-rw-r-- 1 borey-zhu borey-zhu 64 Mar 27 14:26 node0.priv
-rw-rw-r-- 1 borey-zhu borey-zhu 64 Mar 27 14:26 node0.pub
-rw-rw-r-- 1 borey-zhu borey-zhu 16 Mar 27 14:19 peers.list
-rw-rw-r-- 1 borey-zhu borey-zhu 64 Mar 27 14:26 test@test.priv
-rw-rw-r-- 1 borey-zhu borey-zhu 64 Mar 27 14:26 test@test.pub
# 创建配置文件
# 每个节点都对应独的 redis & postgresql
borey-zhu@AWS-TEST-DT:~/ext_data/iroha/conf$ cat config.json
{
"block_store_path" : "/home/borey-zhu/ext_data/iroha/data/block_store/",
"torii_port" : 50051,
"internal_port" : 10001,
"pg_opt" : "host=localhost port=5432 user=postgres password=312312",
"redis_host" : "localhost",
"redis_port" : 3807,
"max_proposal_size" : 10,
"proposal_delay" : 5000,
"vote_delay" : 5000,
"load_delay" : 5000
}
# 运行iroha
nohup irohad --config conf/config.json --genesis_block conf/genesis.block --keypair_name conf/node0 &
# 日志
borey-zhu@AWS-TEST-DT:~/ext_data/iroha$ cat nohup.out
[14:50:42][th: 25603][info] [MAIN] << start [14:50:42][th: 25603][info] [MAIN] << config initialized [14:50:42][th: 25603][info] [IROHAD] << created [14:50:42][th: 25603][info] [StorageImpl:initConnection] << Start storage creation [14:50:42][th: 25603][info] [StorageImpl:initConnection] << block store created [14:50:42][th: 25603][info] [StorageImpl:initConnection] << connection to Redis completed [14:50:42][th: 25603][info] [StorageImpl:initConnection] << connection to PostgreSQL completed [14:50:42][th: 25603][info] [StorageImpl:initConnection] << transaction to PostgreSQL initialized [14:50:42][th: 25603][info] [IROHAD] << [Init] => storage
[14:50:42][th: 25603][info] [StorageImpl] << Drop ledger [14:50:42][th: 25603][info] [StorageImpl] << drop dp [14:50:42][th: 25603][info] [StorageImpl] << drop redis [14:50:42][th: 25603][info] [StorageImpl] << drop block store [14:50:42][th: 25603][info] [MAIN] << Block is parsed [14:50:42][th: 25603][info] [MAIN] << Genesis block inserted, number of transactions: 1 [14:50:42][th: 25603][info] [IROHAD] << [Init] => converters
[14:50:42][th: 25603][info] [IROHAD] << [Init] => peer query
[14:50:42][th: 25603][info] [IROHAD] << [Init] => crypto provider
[14:50:42][th: 25603][info] [IROHAD] << [Init] => validators
[14:50:42][th: 25603][info] [OrderingGate] << Subscribe [14:50:42][th: 25603][info] [IROHAD] << [Init] => init ordering gate - [true]
[14:50:42][th: 25603][info] [IROHAD] << [Init] => init simulator
[14:50:42][th: 25603][info] [IROHAD] << [Init] => block loader
[14:50:42][th: 25603][info] [IROHAD] << [Init] => consensus gate
[14:50:42][th: 25603][info] [IROHAD] << [Init] => synchronizer
[14:50:42][th: 25603][info] [IROHAD] << [Init] => pcs
[14:50:42][th: 25603][info] [IROHAD] << [Init] => command service
[14:50:42][th: 25603][info] [IROHAD] << [Init] => query service
[14:50:42][th: 25603][info] [MAIN] << Running iroha [14:50:42][th: 25603][info] [IROHAD] << ===> iroha initialized
# 进入交互模式
iroha-cli --interactive -name admin@test --key_path conf/
# 选择 2
Choose what to do:
1. New transaction (tx)
2. New query (qry)
3. New transaction status request (st)
> : 2
# 查看当前 Role
Choose query:
1. Get all permissions related to role (get_role_perm)
2. Get Transactions by transactions' hashes (get_tx)
3. Get information about asset (get_ast_info)
4. Get Account's Transactions (get_acc_tx)
5. Get all current roles in the system (get_roles)
6. Get Account's Signatories (get_acc_sign)
7. Get Account's Assets (get_acc_ast)
8. Get Account Information (get_acc)
0. Back (b)
> : 5
Query is formed. Choose what to do:
1. Send to Iroha peer (send)
2. Save as json file (save)
0. Back (b)
> : 1
Peer address: 127.0.0.1
Peer port: 50051
[17:24:18][th: 26754][info] [QueryResponseHandler] << admin [17:24:18][th: 26754][info] [QueryResponseHandler] << user [17:24:18][th: 26754][info] [QueryResponseHandler] << money_creator --------------------
Choose what to do:
1. New transaction (tx)
2. New query (qry)
3. New transaction status request (st)
> : 1
Forming a new transactions, choose command to add:
1. Detach role from account (detach)
2. Add new role to account (apnd_role)
3. Create new role (crt_role)
4. Set account key/value detail (set_acc_kv)
5. Transfer Assets (tran_ast)
6. Grant permission over your account (grant_perm)
7. Subtract Assets Quantity from Account (sub_ast_qty)
8. Set Account Quorum (set_qrm)
9. Remove Signatory (rem_sign)
10. Create Domain (crt_dmn)
11. Revoke permission from account (revoke_perm)
12. Create Account (crt_acc)
13. Add Signatory to Account (add_sign)
14. Create Asset (crt_ast)
15. Add Peer to Iroha Network (add_peer)
16. Add Asset Quantity (add_ast_qty)
0. Back (b)
> : 10
# 创建 domain id borey
Domain Id: borey
Default Role name: money_creator
Command is formed. Choose what to do:
1. Add one more command to the transaction (add)
2. Send to Iroha peer (send)
3. Go back and start a new transaction (b)
4. Save as json file (save)
> : 2
Peer address: 127.0.0.1
Peer port: 50051
[17:25:03][th: 26754][info] [TransactionResponseHandler] << Transaction successfully sent
Congratulation, your transaction was accepted for processing.
Its hash is 6cc2707fb997782c6550a7a5f9cf03122f2f61f25693bc510f8b0e4d726fd6d4
--------------------
# 查询交易信息
Choose what to do:
1. New transaction (tx)
2. New query (qry)
3. New transaction status request (st)
> : 3
Choose action:
1. Get status of transaction (get_tx_info)
0. Back (b)
> : 1
Requested tx hash: 6cc2707fb997782c6550a7a5f9cf03122f2f61f25693bc510f8b0e4d726fd6d4
Tx hash is saved. Choose what to do:
1. Send to Iroha peer (send)
2. Save as json file (save)
0. Back (b)
> : 1
Peer address: 127.0.0.1
Peer port: 50051
# 成功
Transaction was successfully committed.
--------------------
Choose what to do:
1. New transaction (tx)
2. New query (qry)
3. New transaction status request (st)
Forming a new transaction. Choose command to add:
1. Detach role from account (detach)
2. Add new role to account (apnd_role)
3. Create new role (crt_role) 4. Set account key/value detail (set_acc_kv) 5. Transfer Assets (tran_ast) 6. Grant permission over your account (grant_perm) 7. Subtract Assets Quantity from Account (sub_ast_qty) 8. Set Account Quorum (set_qrm) 9. Remove Signatory (rem_sign) 10. Create Domain (crt_dmn) 11. Revoke permission from account (revoke_perm) 12. Create Account (crt_acc) 13. Add Signatory to Account (add_sign) 14. Create Asset (crt_ast) 15. Add Peer to Iroha Network (add_peer) 16. Add Asset Quantity (add_ast_qty) 0. Back (b) > : 14 # 发现wcoin资产 Asset name: wcoin # 选择domain id Domain Id: borey # 精度为 2 Asset precision: 2 Command is formed. Choose what to do: 1. Add one more command to the transaction (add) 2. Send to Iroha peer (send) 3. Go back and start a new transaction (b) 4. Save as json file (save) > : 2 Peer address: 127.0.0.1 Peer port: 50051 [17:33:17][th: 26754][info] [TransactionResponseHandler] << Transaction successfully sent Congratulation, your transaction was accepted for processing. Its hash is 09726a5781af2c703a903bf451f11442e57104f4bbb1ad691b6bf15de771e2e8 -------------------- Choose what to do: 1. New transaction (tx) 2. New query (qry) 3. New transaction status request (st) > : 3 Choose action: 1. Get status of transaction (get_tx_info) 0. Back (b) > : 1 Requested tx hash: 09726a5781af2c703a903bf451f11442e57104f4bbb1ad691b6bf15de771e2e8 Tx hash is saved. Choose what to do: 1. Send to Iroha peer (send) 2. Save as json file (save) 0. Back (b) > : 127.0.0.1 Command not found: 127.0.0.1 Parser for command not found > : 1 Peer address: 127.0.0.1 Peer port: 50051 # 创建资产成功 Transaction was successfully committed. -------------------- Choose what to do: 1. New transaction (tx) 2. New query (qry) 3. New transaction status request (st)
Choose what to do:
1. New transaction (tx)
2. New query (qry)
3. New transaction status request (st)
> : 1
Forming a new transactions, choose command to add:
1. Detach role from account (detach)
2. Add new role to account (apnd_role)
3. Create new role (crt_role)
4. Set account key/value detail (set_acc_kv)
5. Transfer Assets (tran_ast)
6. Grant permission over your account (grant_perm)
7. Subtract Assets Quantity from Account (sub_ast_qty)
8. Set Account Quorum (set_qrm)
9. Remove Signatory (rem_sign)
10. Create Domain (crt_dmn)
11. Revoke permission from account (revoke_perm)
12. Create Account (crt_acc)
13. Add Signatory to Account (add_sign)
14. Create Asset (crt_ast)
15. Add Peer to Iroha Network (add_peer)
16. Add Asset Quantity (add_ast_qty)
0. Back (b)
> : 16
# 选择账户id
Account Id: admin@test
# 资产
Asset Id: wcoin#borey
Amount to add (integer part): 100000000
Amount to add (precision): 2
100000000 2
Command is formed. Choose what to do:
1. Add one more command to the transaction (add)
2. Send to Iroha peer (send)
3. Go back and start a new transaction (b)
4. Save as json file (save)
> : 2
Peer address: 127.0.0.1
Peer port: 50051
[17:39:56][th: 26754][info] [TransactionResponseHandler] << Transaction successfully sent
Congratulation, your transaction was accepted for processing.
Its hash is 92db22d62024ff9170f8044fc0c569cb08da7ac07d96a06fb28fab071cd920ed
--------------------
# 查询交易
Choose what to do:
1. New transaction (tx)
2. New query (qry)
3. New transaction status request (st)
> : 3
Choose action:
1. Get status of transaction (get_tx_info)
0. Back (b)
> : 1
Requested tx hash: 92db22d62024ff9170f8044fc0c569cb08da7ac07d96a06fb28fab071cd920ed
Tx hash is saved. Choose what to do:
1. Send to Iroha peer (send)
2. Save as json file (save)
0. Back (b)
> : 1
Peer address: 127.0.0.1
Peer port: 50051
# 成功
Transaction was successfully committed.
Choose what to do:
1. New transaction (tx)
2. New query (qry)
3. New transaction status request (st)
> : 2
Choose query:
1. Get all permissions related to role (get_role_perm)
2. Get Transactions by transactions' hashes (get_tx)
3. Get information about asset (get_ast_info)
4. Get Account's Transactions (get_acc_tx)
5. Get all current roles in the system (get_roles)
6. Get Account's Signatories (get_acc_sign)
7. Get Account's Assets (get_acc_ast)
8. Get Account Information (get_acc)
0. Back (b)
> : 7
# 输入账户
Requested account Id: admin@test
# 输入资产
Requested asset Id: wcoin#borey
Query is formed. Choose what to do:
1. Send to Iroha peer (send)
2. Save as json file (save)
0. Back (b)
> : 1
Peer address: 127.0.0.1
Peer port: 50051
[17:43:04][th: 26754][info] [QueryResponseHandler] << [Account Assets] [17:43:04][th: 26754][info] [QueryResponseHandler] << -Account Id- admin@test [17:43:04][th: 26754][info] [QueryResponseHandler] << -Asset Id- wcoin#borey [17:43:04][th: 26754][info] [QueryResponseHandler] << -Balance- 1000000.00 --------------------
gcc version 6.3.0
sudo pip install grpcio-tools -i http://mirrors.aliyun.com/pypi/simple/
cd example/python
# 修改prepare.sh 文件 cmake -H$IROHA_HOME -DCMAKE_BUILD_TYPE=Release -Dprotobuf_LIBRARY=/usr/local/lib/libprotobuf.a -Bbuild -DSWIG_PYTHON=ON;
./pre
pare.sh
# 编译后Linux下的API的文件为 build/shared_model/bindings/ 目录下的:
iroha.py _iroha.so
prod@ubuntu:~/blockchain/iroha/example/python/build$ ldd shared_model/bindings/_iroha.so
linux-vdso.so.1 => (0x00007ffe1711f000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5a81b5a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5a81851000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5a8163a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5a81270000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5a82ad7000)
手动升级
镜像站点:
https://gcc.gnu.org/mirrors.htm
ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/
m4:http://www.gnu.org/software/m4/m4.html
gmp:https://gmplib.org/
mpfr:http://www.mpfr.org/
mpc:http://www.multiprecision.org/
依次安装编译上述依赖包
编译
# gcc 配置
./configure --prefix=/usr/local/gcc-6.3 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --program-suffix=6.3.0
# 在编译GCC的过程中可能出现“configure: error: cannot compute suffix of object files: cannot compile”的错误,解决方法是:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
make -j4 && sudo make install
指定GCC版本
export CC=/usr/local/gcc-6.3/bin/gcc
export CXX=/usr/local/gcc-6.3/bin/g++
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/:/usr/local/gcc-6.3/lib/:/usr/local/gcc-6.3/lib64/
自动升级
配置源进行安装 https://launchpad.net/ubuntu/+ppas?name_filter=gcc
ed25519_test.cpp:(.text+0x4ab): undefined reference to `testing::internal::GetBoolAssertionFailureMessage[abi:cxx11](testing::AssertionResult const&, char const*, char const*, char const*)’
修改文件
vim /usr/local/gcc-5.5/include/c++/5.5.0/x86_64-unknown-linux-gnu/bits/c++config.h
#define _GLIBCXX_USE_CXX11_ABI 0
If you get linker errors about undefined references to symbols that involve types in the std::__cxx11 namespace or the tag [abi:cxx11] then it probably indicates that you are trying to link together object files that were compiled with different values for the _GLIBCXX_USE_CXX11_ABI macro. This commonly happens when linking to a third-party library that was compiled with an older version of GCC. If the third-party library cannot be rebuilt with the new ABI then you will need to recompile your code with the old ABI.
ERROR: cmake cannot find lpthreads
解决方案:
修改 cmake/dependencies.cmake 文件注释掉 #find_package(Threads REQUIRED)
1、修改CMakeList.txt 中 DEBUG 编译参数选项 SET(CMAKE_CXX_FLAGS_DEBUG "-g -ggdb -Wextra -Wno-unused-parameter -Wno-deprecated-declarations -O0")
2、重新编译
# 默认 -DCMAKE_BUILD_TYPE=Debug
cmake -H. -Bbuild
cd build && make -j4
3、修改 ulimit -c 的值
prod@ubuntu:~/blockchain/iroha$ ulimit -c unlimited
prod@ubuntu:~/blockchain/iroha$ ulimit -c
unlimited
4、运行irohad 生成 coredump 文件
gdb irohad --config conf/config.json --genesis_block init/genesis.block --keypair_name init/node0 [corefile]
# 查看程序crash堆栈信息
bt