美文网首页
fatal error: 'eosiolib/eosio.hpp

fatal error: 'eosiolib/eosio.hpp

作者: uestcAries | 来源:发表于2018-08-23 15:34 被阅读0次

新版的EOS,安装后,合约编译出现找不到h文件的错误。

eos编译成功以后eosiocpp存在与两个地方。

1, 下载到本地的EOS 目录下。 XXXXX/eos/build/tools/

2, 安装目录下。 /usr/local/eosio/bin

我尝试修改了 /usr/local/eosio/bin, 如果不想一级级的引用去执行编译合约可对eosiocpp 建立一个软链接, 因为网上有人说可能导致的问题, 其实不然, 当然依然可以建立一个, 毕竟方便使用 ln -s /usr/loacl/eosio/bin/eosiocpp /usr/local/bin/eosiocpp

下面是我进行修改的一些地方

说明: EOSIO_INSTALL_DIR = 自己编译安装的目录
BOOST_INCLUDE_DIR = eos的boost库目录, 其他的基本都需要去eos的安装目录设置

#!/bin/bash

#EOSIO_BIN_INSTALL_DIR=`dirname $0`

#if [ "${EOSIO_BIN_INSTALL_DIR}" == "." ]; then

#  EOSIO_BIN_INSTALL_DIR=`pwd`

#fi

#EOSIO_INSTALL_DIR=`dirname ${EOSIO_BIN_INSTALL_DIR}`

EOSIO_INSTALL_DIR=/home/aries/blockChain/eos

ABIGEN=${EOSIO_INSTALL_DIR}/build/programs/eosio-abigen/eosio-abigen

#BOOST_INCLUDE_DIR=/root/opt/boost/include

BOOST_INCLUDE_DIR=/home/aries/opt/boost/include

function copy_skeleton {

    set -e

    cp -r "${EOSIO_INSTALL_DIR}/contracts/skeleton/." $newname

    for file in $(find ./$newname -name 'skeleton.*')

    do

        newfile=`echo $file | sed 's/skeleton\./'"$newname"'./'`

#        echo mv "${file}" "${newfile}"

        mv "${file}" "${newfile}"

        exp=s/skeleton/${newname}/g

#        echo sed -i ${exp}  ${newfile}

        sed ${exp}  ${newfile} > ${newfile}1

        mv ${newfile}1 ${newfile}

    done

    echo "created $newname from skeleton"
    set +e
}

function build_contract {
    set -e
    workdir=`mktemp -d`
    if [[ ${VERBOSE} == "1" ]]; then
      PRINT_CMDS="set -x"
    fi
    ($PRINT_CMDS; mkdir $workdir/built)

    for file in $@; do
        name=`basename $file`
        filePath=`dirname $file`
        ($PRINT_CMDS; /root/opt/wasm/bin/clang -emit-llvm -O3 --std=c++14 --target=wasm32 -nostdinc \

                                  -DBOOST_DISABLE_ASSERTS -DBOOST_EXCEPTION_DISABLE \
                                  -nostdlib -nostdlibinc -ffreestanding -nostdlib -fno-threadsafe-statics -fno-rtti \
                                  -fno-exceptions -I ${EOSIO_INSTALL_DIR}/include \
                                  -I${EOSIO_INSTALL_DIR}/contracts/libc++/upstream/include \
                                  -I${EOSIO_INSTALL_DIR}/contracts/musl/upstream/include \
                                  -I${BOOST_INCLUDE_DIR} \
                                  -I $filePath \
  -I${EOSIO_INSTALL_DIR}/contracts \
                                  -I${EOSIO_INSTALL_DIR}/externals/magic_get/include \
                                  ${EOSIOCPP_CFLAGS} \
                                  -c $file -o $workdir/built/$name
        )

    done
    ($PRINT_CMDS; /root/opt/wasm/bin/llvm-link -only-needed -o $workdir/linked.bc $workdir/built/* \
                                  ${EOSIO_INSTALL_DIR}/build/contracts/eosiolib/eosiolib.bc \
                                  ${EOSIO_INSTALL_DIR}/build/contracts/libc++/libc++.bc \
                                  ${EOSIO_INSTALL_DIR}/build/contracts/musl/libc.bc

    )
    ($PRINT_CMDS; /root/opt/wasm/bin/llc -thread-model=single --asm-verbose=false -o $workdir/assembly.s $workdir/linked.bc)
    ($PRINT_CMDS; ${EOSIO_INSTALL_DIR}/build/externals/binaryen/bin/eosio-s2wasm -o $outname -s 16384 $workdir/assembly.s)
    ($PRINT_CMDS; ${EOSIO_INSTALL_DIR}/build/libraries/wasm-jit/Source/Programs/eosio-wast2wasm $outname ${outname%.*}.wasm -n)
    ($PRINT_CMDS; rm -rf $workdir)
    set +e
}

function generate_abi {
    if [[ ! -e "$1" ]]; then
        echo "You must specify a file"
        exit 1
    fi

    context_folder=$(cd "$(dirname "$1")" ; pwd -P)

    ${ABIGEN} -extra-arg=-c -extra-arg=--std=c++14 -extra-arg=--target=wasm32 \
        -extra-arg=-nostdinc -extra-arg=-nostdinc++ -extra-arg=-DABIGEN \
        -extra-arg=-I${EOSIO_INSTALL_DIR}/contracts/libc++/upstream/include \
        -extra-arg=-I${EOSIO_INSTALL_DIR}/contracts/musl/upstream/include \
        -extra-arg=-I${BOOST_INCLUDE_DIR} \
-extra-arg=-I${EOSIO_INSTALL_DIR}/contracts \

        -extra-arg=-I${EOSIO_INSTALL_DIR}/externals/magic_get/include \
        -extra-arg=${EOSIOCPP_CFLAGS} \
        -extra-arg=-I${EOSIO_INSTALL_DIR}/include -extra-arg=-I$context_folder \
        -extra-arg=-fparse-all-comments -destination-file=${outname} -verbose=0 \
        -context=$context_folder $1 --
    if [ "$?" -ne 0 ]; then
        exit 1
    fi   
    echo "Generated ${outname} ..."
}

function print_help {
    echo "Usage: $0 -o output.wast contract.cpp [other.cpp ...]"
    echo "      OR"
    echo "      $0 -n mycontract"
    echo "      OR"
    echo "      $0 -g contract.abi types.hpp"
    echo
    echo "Options:"
    echo "  -n | --newcontract [name]"
    echo "      Create a new contract in the [name] folder, based on the example contract"
    echo "  OR"
    echo "  -o | --outname [output.wast] [input.cpp ...]"
    echo "      Generate the wast output file based on input cpp files"
    echo "      The wasm output will also be created as output.wasm"
    echo "  OR"
    echo "  -g | --genabi contract.abi types.hpp"
    echo "      Generate the ABI specification file [EXPERIMENTAL]"
}
command=""
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
    -h|--help)
        print_help
        break;
        ;;
    -n|--newcontract)
        newname="$2"
        command="newcontract"
        shift 2
        break
        ;;
    -o|--outname)
        outname="$2"
        command="outname"
        shift 2
        break
        ;;

    -g|--genabi)

        outname="$2"

        command="genabi"

        shift 2
        ;;
    *)
        echo "Unrecognized option: $1"
        exit 1
        ;;
esac
done
if [[ "outname" == "$command" ]]; then
    build_contract $@
elif [[ "newcontract" == "$command" ]]; then
    copy_skeleton
elif [[ "genabi" == "$command" ]]; then
    generate_abi $@
else
    print_help
    exit 1
fi

相关文章

网友评论

      本文标题:fatal error: 'eosiolib/eosio.hpp

      本文链接:https://www.haomeiwen.com/subject/xpcmiftx.html