go-etl在macos下编译若干问题
go-etl是一个集数据源抽取,转化,加载的工具集,提供强大的数据同步能力。
- 主流数据库的数据抽取以及数据加载的能力,在storage包中实现
- 类二维表的数据流的数据抽取以及数据加载的能力,在stream包中实现
- 类似datax的数据同步能力,在datax包中实现
本数据数据同步工具以下数据源的同步能力
https://github.com/Breeze0806/go-etl
创建自己的工作版本,然后下载源码
git clone https://github.com/zsy619/go-etl.git
主要注意事项如下:
- 只提供了linux与windows编译的脚本,macos下没有提供编译脚本
- oracle主要依赖的类库:
- github.com/godror/godror
- 安装相关的oracle类库,请从官网下载并安装
- 本机安装目录:/Volumes/D/oracle/instantclient_19_16
- 排除对db2编译
- 启用cgo——CGO_ENABLED=1
- 这个工具现在就支持单表单任务数据同步,如要做定时同步,请使用crontab或者其他定时任务工具
步骤一:添加缺少文件
cmd/datax/tools/script_darwin.go
storage/database/db2/decode_chinese_darwin.go
步骤二:根据release.bat构建自己的编译脚本
export IGNORE_PACKAGES=db2
set GO111MODULE=on
go mod download
go mod vendor
go generate ./...
cd cmd/datax
go build -o datax-darwin
cp -f datax-darwin ../../release/datax-darwin
chmod -R 777 ../../release/datax-darwin
rm -f datax-darwin
cd ../..
go run tools/datax/release/main.go
步骤三:macos编译下提示错误:
../../vendor/github.com/godror/godror/orahlp.go:563:19: undefined: VersionInfo
步骤四:经过N次尝试,发现godror类库在macos下无法编译,最终找到如下命令,需要安装gcc
brew install gcc
gcc -v
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: x86_64-apple-darwin23.5.0
Thread model: posix
错误提示: gcc_libinit_windows.c:6:10: fatal error: ‘windows.h’ file not found 解决方案:
- 使用mingw-w64工具进行交叉编译
- MinGW-w64不仅能编译为Win64程序,也能编译为Win32程序。
- MinGW-w64同样是跨平台软件,可以运行在Windows、GNU/Linux、macOS中。
- MinGW-w64官网:http://mingw-w64.org
- MacOS下安装mingw-w64
brew install mingw-w64
- 最终交叉编译命令
# CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 go build -v -o datax.exe
- 验证生成的文件
说明生成成功~~~
file datax.exe datax.exe: PE32+ executable (console) x86-64, for MS Windows
针对linux下交叉编译,还是有问题,暂未解决,后期补充。
linux_syscall.c:67:13: error: call to undeclared function 'setresgid'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
linux_syscall.c:67:13: note: did you mean 'setregid'?
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/unistd.h:593:6: note: 'setregid' declared here
linux_syscall.c:73:13: error: call to undeclared function 'setresuid'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
linux_syscall.c:73:13: note: did you mean 'setreuid'?
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/unistd.h:595:6: note: 'setreuid' declared here
- 在macos下编译go-etl,主要解决oracle类库以及交叉编译生成windows应用问题
- 在macox下交叉编译linux应用,还是有问题,暂未解决,后期补充。
- 最终交叉编译脚本如下:
#!/bin/bash sh cover.sh export IGNORE_PACKAGES=db2 export CGO_ENABLED=1 export GO111MODULE=on go mod download go mod vendor go generate ./... cd cmd/datax # 【darwin/amd64】 echo "start build darwin/amd64 ..." CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -o datax-darwin cp -f datax-darwin ../../release/datax-darwin chmod -R 777 ../../release/datax-darwin rm -f datax-darwin # 【linux/amd64】 # echo "start build linux/amd64 ..." # CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o datax-linux # cp -f datax-linux ../../release/datax-linux # chmod -R 777 ../../release/datax-linux # rm -f datax-linux # 【windows/amd64】 echo "start build windows/amd64 ..." CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 go build -v -o datax.exe cp -f datax.exe ../../release/datax.exe chmod -R 777 ../../release/datax.exe rm -f datax.exe cd ../.. go run tools/datax/release/main.go
- 详细代码查看
- github地址:https://github.com/zsy619/go-etl