项目场景:
golang项目,使用"github.com/alexbrainman/odbc"驱动,报错:/go/pkg/mod/github.com/alexbrainman/odbc@v0.0.0-20230814102256-1421b829acc9/apilapi.go:17:9: undefined: SQLSMALLINT
问题描述
项目使用"github.com/alexbrainman/odbc"驱动连接sql server数据库,走持续集成编译时报错,具体报错如下:
/go/pkg/mod/github.com/alexbrainman/odbc@v0.0.0-20230814102256-1421b829acc9/apilapi.go:17:9: undefined: SQLSMALLINT
另外在编译arm64架构镜像时,报错:
/usr/local/go/pkgtool/linux arm64/link: running gcc failed: exit status 1
collect2: fatal error: cannot find ‘ld’
compilation terminated.
原因分析:
在Linux环境下使用github.com/alexbrainman/odbc构建时出现undefined: SQLSMALLINT错误通常是因为缺少ODBC相关的头文件。
安装ODBC开发包:在Linux系统上,您需要安装ODBC开发包以便编译github.com/alexbrainman/odbc。您可以使用包管理工具来安装ODBC开发包,具体命令可能因Linux发行版而异。
解决方案:
在Ubuntu上,您可以运行以下命令安装ODBC开发包:sudo apt-get install unixodbc-dev
在docker-file中:RUN apk update && apk add unixodbc-dev
而/usr/local/go/pkgtool/linux arm64/link: running gcc failed: exit status 1 这个问题则是因为引入的某些工具包没有ld.gold而只有ld.bfd,因此添加环境变量方可解决此问题:
> export CGO_CFLAGS=$CGO_CFLAGS" -fuse-ld=bfd",
> export CGO_LDFLAGS=$CGO_LDFLAGS" -fuse-ld=bfd"
> export GOGCCFLAGS=$GOGCCFLAGS" -fuse-ld=bfd"