我试图在cgo中访问c结构,但是这个
无法确定C.utmpx的名称
utmpx是一个c struct
这是go代码:
/*
#include <stdio.h>
#include <stdlib.h>
#include <utmpx.h>
#include <fcntl.h>
#include <unistd.h>
*/
import "C"
type record C.utmpx
fd, err := os.Open(C._PATH_UTMPX) // this works
fd, err := os.Open(C.UTMPX_FILE) // error
在utmpx.h文件中,有
#define _PATH_UTMPX "/var/run/utmpx"
#define UTMPX_FILE _PATH_UTMPX
我可以使用_PATH_UTMPX,但在使用UTMPX_FILE时会收到相同的警告,为什么?
似乎我无法访问.h文件中声明的这些变量 我怎么能这样做?
平台:macOS sirria,去1.8
答案 0 :(得分:1)
#define对CGo有问题。我可以在Linux amd64上使用Go 1.8.1,就像这样:
package main
import "os"
/*
#define _GNU_SOURCE 1
#include <stdio.h>
#include <stdlib.h>
#include <utmpx.h>
#include <fcntl.h>
#include <unistd.h>
char *path_utmpx = UTMPX_FILE;
typedef struct utmpx utmpx;
*/
import "C"
type record C.utmpx
func main() {
path := C.GoString(C.path_utmpx)
fd, err := os.Open(path)
if err != nil {
panic("bad")
}
fd.Close()
}
type record C.utmpx
编译。一些指示:
祝你好运!