FISCO-BCOS / go-sdk

golang SDK of FISCO BCOS
Apache License 2.0
72 stars 57 forks source link

windows环境使用go-sdk,编译报错 #252

Open iamnotsofun opened 8 months ago

iamnotsofun commented 8 months ago

环境: go1.21.6 使用gosdk README中的hello_main.go部署合约,编译时报错: 3bb8f940bf726bf81fca97996a8fe36

bxq2011hust commented 8 months ago
  1. 下载csdk的动态库bcos-c-sdk.dll到执行go build的目录下,重命名为libbcos-c-sdk.dll
  2. 尝试重新执行go build看是否能够成功
  3. 如果失败,请基于go env GOMODCACHE和依赖的bcos-c-sdk的版本,找到对应的目录,将libbcos-c-sdk.dll拷贝到依赖的bcos-c-sdk的libs目录下
iamnotsofun commented 7 months ago

根据提供的1和2步骤,仍然出现相同报错,步骤3所指的目录具体是哪个? @bxq2011hust

iamnotsofun commented 7 months ago

在对应目录下,没有找到llibs目录。 image

bxq2011hust commented 7 months ago

在对应目录下,没有找到llibs目录。 image

创建一个,然后把动态库放进去

iamnotsofun commented 7 months ago

已经尝试在该目录下创建libs并放入libbcos-c-sdk.dll,编译仍然报相同错误。

bxq2011hust commented 7 months ago

已经尝试在该目录下创建libs并放入libbcos-c-sdk.dll,编译仍然报相同错误。

go env GOMODCACHE之后的目录和动态库是类似下面的结构吗?检查下你放置的目录是不是正确

bcos-c-sdk@v0.0.0-20240122125257-ba87131d4c17\bindings\go\csdk\libs/libbcos-c-sdk.dll

iamnotsofun commented 7 months ago

已经尝试在该目录下创建libs并放入libbcos-c-sdk.dll,编译仍然报相同错误。

go env GOMODCACHE之后的目录和动态库是类似下面的结构吗?检查下你放置的目录是不是正确

bcos-c-sdk@v0.0.0-20240122125257-ba87131d4c17\bindings\go\csdk\libs/libbcos-c-sdk.dll

是这样的目录结构,但是我是放到bcos-c-sdk@v0.0.0-20240122125257-ba87131d4c17\libs/libbcos-c-sdk.dll下了。 放到bcos-c-sdk@v0.0.0-20240122125257-ba87131d4c17\bindings\go\csdk\libs/libbcos-c-sdk.dll之后,可以编译通过。 但是跑编译后的exe文件没有打印任何日志,直接退出了。 在import go-sdk之前是可以正常运行程序的。 我在程序中只是简单import go-sdk包,如下: image

bxq2011hust commented 7 months ago

猜测是动态库找不到导致的,你需要在编译得到的exe所在的目录,也放置这个动态库,windows会自动找到 @iamnotsofun

iamnotsofun commented 7 months ago

猜测是动态库找不到导致的,你需要在编译得到的exe所在的目录,也放置这个动态库,windows会自动找到 @iamnotsofun

放置了,程序仍然无法运行。

bxq2011hust commented 7 months ago

猜测是动态库找不到导致的,你需要在编译得到的exe所在的目录,也放置这个动态库,windows会自动找到 @iamnotsofun

放置了,程序仍然无法运行。

请贴一下报错信息

iamnotsofun commented 7 months ago

猜测是动态库找不到导致的,你需要在编译得到的exe所在的目录,也放置这个动态库,windows会自动找到 @iamnotsofun

放置了,程序仍然无法运行。

请贴一下报错信息

exe程序没有打印任何日志就退出了,如何排查?不引入go-sdk会正常执行并打印日志。

bxq2011hust commented 7 months ago

@iamnotsofun 在cmd里面执行看有没有报错缺动态库,或者搜一下我记得有个工具可以查看exe依赖的动态库,类似于linux下的ldd

iamnotsofun commented 7 months ago

通过cmd执行会弹窗报错缺少动态库,PowerShell不会。dll改名后解决。

@iamnotsofun 在cmd里面执行看有没有报错缺动态库,或者搜一下我记得有个工具可以查看exe依赖的动态库,类似于linux下的ldd