在Go中使用可变参数C函数

Eri*_*ner 5 go cgo

我用shm_opencgo.shm_open在Linux上用3个参数定义

int shm_open(const char *name, int oflag, mode_t mode);
Run Code Online (Sandbox Code Playgroud)

而在OSX(达尔文)上,第3模式标志是可选的.

int shm_open(const char *name, int oflag, ...);
Run Code Online (Sandbox Code Playgroud)

当尝试在OSX上传递模式时,这会产生CGO问题.它抱怨我传递了3个参数,当时只有2个参数.

我该如何解决这个问题?

Eri*_*ner 6

像往常一样,这个启示在发布到SO后1秒钟.您实际上可以在CGO注释部分声明函数,因此您所要做的就是使用这样的包装器.

/*
#include <stdio.h>

int shm_open2(const char *name, int oflag, mode_t mode) {
  return shm_open(name, oflag, mode);
}
*/
import "C"
Run Code Online (Sandbox Code Playgroud)