If simply call it at chainparams.cpp, error says there is no definition of 'CheckProofOfWork'.
And if I added #include "pow.cpp" at the top of chainparams.cpp, and wrote like
pchMessageStart[3] = 0xaa;
nDefaultPort = 1111;
nPruneAfterHeight = 100000;
// nonce backup value : 591389
genesis = CreateGenesisBlock(1519198776, 591389, 0x1e0ffff0, 1, 50 * COIN); // 0x1effff0 is 504365040
const CChainParams& chainparams = Params();
while(!CheckProofOfWork(genesis.GetHash(), genesis.nBits, Params().GetConsensus())){ ++genesis.nNonce; }
then error says
----------
libbitcoin_common.a(libbitcoin_common_a-chainparams.o): In function `GetNextWorkRequired(CBlockIndex const*, CBlockHeader const*, Consensus::Params const&)':
/home/lee/Desktop/BitcoinEssence/src/pow.cpp:15: multiple definition of `GetNextWorkRequired(CBlockIndex const*, CBlockHeader const*, Consensus::Params const&)'
libbitcoin_server.a(libbitcoin_server_a-pow.o):/home/lee/Desktop/BitcoinEssence/src/pow.cpp:15: first defined here
libbitcoin_common.a(libbitcoin_common_a-chainparams.o): In function `CalculateNextWorkRequired(CBlockIndex const*, long, Consensus::Params const&)':
/home/lee/Desktop/BitcoinEssence/src/pow.cpp:59: multiple definition of `CalculateNextWorkRequired(CBlockIndex const*, long, Consensus::Params const&)'
libbitcoin_server.a(libbitcoin_server_a-pow.o):/home/lee/Desktop/BitcoinEssence/src/pow.cpp:59: first defined here
libbitcoin_common.a(libbitcoin_common_a-chainparams.o): In function `CheckProofOfWork(uint256, unsigned int, Consensus::Params const&)':
/home/lee/Desktop/BitcoinEssence/src/pow.cpp:92: multiple definition of `CheckProofOfWork(uint256, unsigned int, Consensus::Params const&)'
libbitcoin_server.a(libbitcoin_server_a-pow.o):/home/lee/Desktop/BitcoinEssence/src/pow.cpp:92: first defined here
-----------
So what now?
Strange is, as I mentioned already, validation.cpp just simply call 'CheckProofOfWork' without any prior declaration.
How?