macos:
go build -ldflags "-w -s" main.go
Windows:
//64位使用 x86_64-w64-mingw32-gcc
//可能需要mac 安装 brew install mingw-w64
//32位
GOOS=windows GOARCH=386 CGO_ENABLED=1 CC=i686-w64-mingw32-gcc go build -buildmode=c-shared -ldflags "-w -s" -o cShareDll.dll cShareDll.go
//64位
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -buildmode=c-shared -ldflags "-w -s" -o cShareDll.dll cShareDll.go
//编译macos 64位 so 或者 dylib delphi C/C++ 可以调用
GOOS=darwin GOARCH=amd64 CGO_ENABLED=1 go build -buildmode=c-shared -ldflags "-w -s" -o cShareDll.so cShareDll.go
//默认参数是 debug 版,加编译参数 -ldflags "-w -s" 才是 release. -w 为去掉调试信息,-s 为去掉符号表,文件大小会减小。
Linux:
brew install FiloSottile/musl-cross/musl-cross
//为了交叉编译基于cgo的项目,需要设置CC或CCX环境变量标志来构建到 x86_64-linux-musl-gcc和x86_64-linux-musl-g++(或其他相关架构)。
//该环境变量标志应放在GOOS和GOARCH两个环境变量标志之前。
//64位
CC=x86_64-linux-musl-gcc GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -buildmode=c-shared -o cShareDll.so cShareDll.go
Android:
//安装 NDK 环境设置
//编辑.zshrc 添加以下变量
export ANDROID_HOME="/Users/M2Macbook/Library/Android"
export ANDROID_NDK_HOME="$ANDROID_HOME/android-ndk-r21b"
export PATH="$PATH:/Users/M2Macbook/Library/Android/android-ndk-r21b/toolchains/llvm/prebuilt/darwin-x86_64/bin"
//编译命令
//armeabi-v7a
GOOS=android GOARCH=arm CGO_ENABLED=1 CC=armv7a-linux-androideabi21-clang go build -buildmode=c-shared -ldflags "-w -s" -o output/android/armeabi-v7a/cShareDll.so cShareDll.go
//arm64-v8a
GOOS=android GOARCH=arm64 CGO_ENABLED=1 CC=aarch64-linux-android21-clang go build -buildmode=c-shared -ldflags "-w -s" -o output/android/arm64-v8a/cShareDll.so cShareDll.go
//利用strip 工具来减少Android 的 so的大小
//strip 工具会去掉debug和符号信息
//测试可以减少到原来的 60%左右工具在 android-ndk 的目录中
//类似
cd android-ndk/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/arm-linux-androideabi/bin
./strip [yourOSFile]
iOS:
//编译iOS静态库
export iOSCFLAGS="-arch arm64 -miphoneos-version-min=9.0 -isysroot "$(xcrun -sdk iphoneos --show-sdk-path)
CGO_ENABLED=1 GOARCH=arm64 CC="clang $iOSCFLAGS" go build -x -buildmode=c-archive -ldflags "-w -s" -o ioslib.a cShareDll.go