【发布时间】:2022-01-11 13:19:51
【问题描述】:
我正在使用一些 C 库形式的 Go,使用 cgo 来处理转换。
我有一个 C 头文件,如下所示:
#include <stdlib.h>
typedef struct {
k uint64_t;
} params;
这个结构在 Go 中使用,代码如下:
package test
/*
#cgo CFLAGS: -g -Wall
#cgo LDFLAGS: -L. -lmylib -lm -ldl
#include "mylib.h"
*/
import "C"
func NewParams(k uint64) Paramets {
return Params{
k: C.ulonglong(k),
}
}
代码在使用 Apple clang 版本 12.0.0 的 OS X 上编译良好,但在使用 clang 版本 7.1.0 的 Linux 上编译失败,产生以下错误:
cannot use _Ctype_ulonglong(k) (type _Ctype_ulonglong) as type _Ctype_ulong in field value
如果我将调用 C.ulonglong 更改为 C.ulong,它在 linux 上可以正常工作,但在 OS X 上会失败。
我如何确保相同的代码在两个平台上都可以运行?
【问题讨论】: