2015-05-14 2 views
1

Чтобы написать некоторый C код в комментарии выше import "C" прост:Как использовать внешние .c файлы с CGO?

// foo.go 
package main 

/* 
int fortytwo() { 
    return 42; 
} 
*/ 
import "C" 
import "fmt" 

func main() { 
    fmt.Printf("forty-two == %d\n", C.fortytwo()) 
    fmt.Printf("forty-three == %d\n", C.fortythree()) 
} 

И это прекрасно работает:

$ go install 
$ foo 
forty-two == 42 

Однако C код в его собственном .c файле:

// foo.c 
int fortythree() { 
    return 43; 
} 

... ссылка от Go:

// foo.go 
func main() { 
    fmt.Printf("forty-two == %d\n", C.fortytwo()) 
    fmt.Printf("forty-three == %d\n", C.fortythree()) 
} 

... не работает:

$ go install 
# foo 
could not determine kind of name for C.fortythree 
+0

Как построить этот код с помощью go build вместо go install? – Tarion

ответ

3

: C заголовочный файл foo.h отсутствует:

// foo.h 
int fortythree(); 

Ссылка заголовочный файл с Go, как это:

// foo.go 
package main 

/* 
#include "foo.h" 

int fortytwo() { 
    return 42; 
} 
*/ 
import "C" 
import "fmt" 

func main() { 
    fmt.Printf("forty-two == %d\n", C.fortytwo()) 
    fmt.Printf("forty-three == %d\n", C.fortythree()) 
} 

Источник: foo.h:

$ go install 
$ foo 
forty-two == 42 
forty-three == 43