4

Cから次の例を作成しようとしていますか?行け?Cgo!

package print

/*
#include <stdio.h>
#include <stdlib.h>
*/
import "C"
import "unsafe"

func Print(s string) {
    cs := C.CString(s)
    C.fputs(cs, (*C.FILE)(C.stdout))
    C.free(unsafe.Pointer(cs))
}

私はWin764でGoを実行しており、 http://tdm-gcc.tdragon.net/の64ビットバージョンのGCCを使用して います。これをLinuxで実行することはできません。

私が得るエラーは次のとおりです。

could not determine kind of name for C.stdout

このメッセージに関するドキュメントを見つけることができず、Googleに表示されるヒットはほとんどありません。

誰かがこれを引き起こしているものについての考えを持っていますか?前もって感謝します!

4

2 に答える 2

4

Windows で C.stdout にアクセスする 1 つの方法を次に示します。

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package stdio

/*
#include <stdio.h>
// on mingw, stderr and stdout are defined as &_iob[FILENO]
// on netbsd, they are defined as &__sF[FILENO]
// and cgo doesn't recognize them, so write a function to get them,
// instead of depending on internals of libc implementation.
FILE *getStdout(void) { return stdout; }
FILE *getStderr(void) { return stderr; }
*/
import "C"

var Stdout = (*File)(C.getStdout())
var Stderr = (*File)(C.getStderr())

https://github.com/golang/go/blob/master/misc/cgo/stdio/stdio.go

于 2012-09-26T05:47:00.150 に答える
0

cgo の実装では、gcc の出力に従って型を推測する方法があります。端末で別のロケールを設定していて、推測に失敗している可能性があります。

これを試して:

LC_ALL=C go build
于 2012-09-26T01:37:14.030 に答える