错误:链码安装失败,状态为:500 [英] Error: chaincode install failed with status: 500
本文介绍了错误:链码安装失败,状态为:500的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经创建了链码,正在尝试将其安装在对等组织上。我可以打包对等组织上的链码,但当它转到安装阶段时,我收到错误消息:
Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image build failed: docker build failed: Error returned from build: 2
# github.com/Nik-U/pbc
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lpbc
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lgmp
collect2: error: ld returned 1 exit status
我使用的是Nik-U的PBC库的GO包装器Nik-U pbc。在他的首页,描述如下:
此程序包必须使用CGO编译。它还需要安装GMP和PBC。在生成过程中,此包将尝试包含<;gmp.h>;和<;pbc/pbc.h>;,然后动态链接到GMP和PBC;。
以下是我尝试过的内容:
- 我已在Nik-U的目录下手动配置了GMP和PBC,并将<;gmp.h&>和<;pbc.h>;的所有地址都更改到了正确的位置。
- 我已尝试使用命令
ln -s /usr/local/lib/libpbc.so libpbc.so
和ln -s /usr/local/lib/libgmp.so
创建链接库文件,但显示相同的错误消息。 - 由于Nik-U包装器使用CGO,所以我将c.go文件中的语句从
#cgo LDFLAGS: -lpbc -lgmp
更改为#cgo LDFLAGS: -L/usr/local/lib -lpbc -lgmp
。在/usr/loca/lib中有:libgmp.a libgmp.la libgmp.so libgmp.so.10 libgmp.so.10.4.1 libpbc.a libpbc.la libpbc.so libpbc.so.1 libpbc.so.1.0.0
。这一改变没有奏效。我仍然收到相同的错误消息。 - 我使用
docker cp **.so containerName:/usr/local/lib/
命令将/usr/local/lib目录的所有文件复制到docker容器的同一目录。它不工作。
以下是我怀疑可能是问题的原因:
- 我使用go.mod文件管理所有依赖项,但go.mod不管理原始的PBC库和GMP库。但是,我不知道如何使用GO模块来管理这两个库(用C?编写)。
- NIK-U的pbc包装器必须动态链接PBC和GMP库,这就是我在子目录中手动配置和安装它们的原因,并将Include信息从
#include <pbc/pbc.h>
更改为#include <pbc-0.5.14/include/pbc.h>
不用。
有人能帮忙吗..
推荐答案
在Hyperleger Fabric中,链码基于虚拟环境以沙盒的形式执行。换句话说,它不是在对等机中执行,而是在新的docker容器中执行。
即使您将*.so文件移动到对等方,似乎也发生了cannot find
错误,因为新创建的链码没有导入它。
若要解决此问题,需要执行两项任务。
1.将库导入fabric-ccenv
坞站映像
Fabric的GO链码容器出现在Fabric-ccenv的图像中。基于Fabric-ccenv映像,创建嵌入库的新映像
FROM fabric-ccenv:<your_fabric_tag>
COPY <your_src_library_path> <your_target_library_path>
docker build -f <your_dockerfile> -t fabric-ccenv:<your_new_fabric_tag>
2.更改Fabric-Peer的core.yaml
您必须更改对等项的配置。即在core.yaml中设置chaincode的配置。
您可以在chaincode的builder项中设置有关Fabric-ccenv的信息。将此值更改为在上面的步骤1中创建的映像的值。
chaincode:
id:
path:
name:
#builder: $(DOCKER_NS)/fabric-ccenv:$(TWO_DIGIT_VERSION)
builder: $(DOCKER_NS)/fabric-ccenv:<your_new_fabric_tag>
pull: false
golang:
runtime: $(DOCKER_NS)/fabric-baseos:$(TWO_DIGIT_VERSION)
dynamicLink: false
这篇关于错误:链码安装失败,状态为:500的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文