go报错之被多次定义,使用阿里云与亚马逊云SDK中报错

报错内容如下

/work/ClipServer.huawei_git/clipServer/src/extrackFrame/src/aws_go/lib/libaws.a(go.o):在函数‘_cgo_topofstack’中:
/usr/lib/go-1.18/src/runtime/asm_amd64.s:1561: `_cgo_topofstack'被多次定义
/work/ClipServer.huawei_git/clipServer/src/extrackFrame/src/aliyun_go/lib/libaly.a(go.o):/usr/lib/go-1.18/src/runtime/asm_amd64.s:1561:第一次在此定义
/work/ClipServer.huawei_git/clipServer/src/extrackFrame/src/aws_go/lib/libaws.a(go.o):在函数‘_cgo_panic’中:
/usr/lib/go-1.18/src/runtime/cgo/callbacks.go:45: `_cgo_panic'被多次定义
/work/ClipServer.huawei_git/clipServer/src/extrackFrame/src/aliyun_go/lib/libaly.a(go.o):/usr/lib/go-1.18/src/runtime/cgo/callbacks.go:45:第一次在此定义
/work/ClipServer.huawei_git/clipServer/src/extrackFrame/src/aws_go/lib/libaws.a(go.o):在函数‘crosscall2’中:
/usr/lib/go-1.18/src/runtime/cgo/asm_amd64.s:14: `crosscall2'被多次定义
/work/ClipServer.huawei_git/clipServer/src/extrackFrame/src/aliyun_go/lib/libaly.a(go.o):/usr/lib/go-1.18/src/runtime/cgo/asm_amd64.s:14:第一次在此定义
collect2: error: ld returned 1 exit status
CMakeFiles/extrackFrame.dir/build.make:134: recipe for target 'extrackFrame' failed
make[2]: *** [extrackFrame] Error 1
CMakeFiles/Makefile2:74: recipe for target 'CMakeFiles/extrackFrame.dir/all' failed
make[1]: *** [CMakeFiles/extrackFrame.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

分析

在项目中,我使用到了阿里云的存储,亚马逊的存储,分国内国外版本,对接sdk是go版本的sdk,所以我将阿里云的go的sdk封装成一个c静态库,将aws的sdk封装成一个静态库,然后在业务程序中调用这两个静态库,然后报错如上。

猜想,是因为阿里云的sdk和aws的sdk,使用了go中同样的底层内容,然后加载两个静态库以后,造成了重复定义的错误。

解决方法

基于以上猜测,将阿里云的go的sdk和aws的go的sdk进行统一封装,在外部到处为一个静态库,这样就不会存在多次定义的问题了。

经过测试,问题解决。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/bootleader/article/details/129794671