go mac编译linux版本,go交叉编译出错(Mac编译Linux)

Mac编译Linux命令:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

执行之后发现报错:

# github.com/mattn/go-sqlite3

../../../../mattn/go-sqlite3/sqlite3_go18.go:18:10: undefined: SQLiteConn

然后我去网上找答案,很多人都说,需要把CGO_ENABLED的值设为1。当我改为1之后,又出现新的错误:

# os/user

/usr/local/go/src/os/user/getgrouplist_unix.go:15:35: warning: passing 'gid_t *' (aka 'unsigned int *') to parameter of type 'int *' converts between pointers to integer types with different sign [-Wpointer-sign]

/usr/include/unistd.h:653:43: note: passing argument to parameter here

# github.com/oushu/oushu-assist/lava/main

/usr/local/go/pkg/tool/darwin_amd64/link: running clang failed: exit status 1

ld: warning: ignoring file /var/folders/7z/dryhn78d0lx320rv7s3fpnjm0000gn/T/go-link-742574817/go.o, file was built for unsupported file format ( 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ) which is not the architecture being linked (x86_64): /var/folders/7z/dryhn78d0lx320rv7s3fpnjm0000gn/T/go-link-742574817/go.o

Undefined symbols for architecture x86_64:

"__cgo_topofstack", referenced from:

__cgo_f7895c2c5a3a_C2func_getnameinfo in 000002.o

__cgo_f7895c2c5a3a_Cfunc_getnameinfo in 000002.o

__cgo_f7895c2c5a3a_C2func_getaddrinfo in 000004.o

__cgo_f7895c2c5a3a_Cfunc_gai_strerror in 000004.o

__cgo_f7895c2c5a3a_Cfunc_getaddrinfo in 000004.o

__cgo_b8ad650f185f_Cfunc_sqlite3_backup_finish in 000006.o

__cgo_b8ad650f185f_Cfunc_sqlite3_backup_init in 000006.o

...

"__cgoexp_b8ad650f185f_callbackTrampoline", referenced from:

_callbackTrampoline in 000005.o

"__cgoexp_b8ad650f185f_commitHookTrampoline", referenced from:

_commitHookTrampoline in 000005.o

"__cgoexp_b8ad650f185f_compareTrampoline", referenced from:

_compareTrampoline in 000005.o

"__cgoexp_b8ad650f185f_doneTrampoline", referenced from:

_doneTrampoline in 000005.o

"__cgoexp_b8ad650f185f_rollbackHookTrampoline", referenced from:

_rollbackHookTrampoline in 000005.o

"__cgoexp_b8ad650f185f_stepTrampoline", referenced from:

_stepTrampoline in 000005.o

"__cgoexp_b8ad650f185f_updateHookTrampoline", referenced from:

_updateHookTrampoline in 000005.o

"_crosscall2", referenced from:

_callbackTrampoline in 000005.o

_stepTrampoline in 000005.o

_doneTrampoline in 000005.o

_compareTrampoline in 000005.o

_commitHookTrampoline in 000005.o

_rollbackHookTrampoline in 000005.o

_updateHookTrampoline in 000005.o

...

"_main", referenced from:

implicit entry/start for main executable

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

其实错误原因就是对于split来说你这个默认的gcc去编译是有问题的。

执行go env 查看 到CC=“clang”,这里我们需要重新下载一个gcc去编译:

下载gcc的包,连接:gcc下载。然后解压。

设置下载该gcc的全局变量;

执行交叉编译命令:CGO_ENABLED=1 CC=x86_64-pc-linux-gcc GOOS=linux GOARCH=amd64 go build

这样对于报错的交叉编译问题就解决啦。还是用了一些时间,才找到了解决 办法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值