DRYな備忘録

Don't Repeat Yourself.

【Go言語】could not determine kind of name for C.foo

問題

cgoを使ってGoのコードからC/C++のライブラリを使いたいので、手始めにHello, World書いて実行したけど、以下のエラーが出る。

% go run main.go
# command-line-arguments
could not determine kind of name for C.foo

可能性1) そこ、空行いれちゃだめ

cat main.go

package main

/*
#include <stdio.h>
void foo(char* s) {
    printf("foo received: %s\n", s);
}
*/

import "C"

func main() {
    message := C.CString("Hello, cgo!!")
    C.foo(message)
}

import "C"のうえに改行いらない

*/
- 
- import "C"
+ import "C"

可能性2) C Compilerが古いのでは

デフォルトで使われてるC Compilerを確認

% go env | grep CC

もしbrewgccを入れてたら、

% which gcc
% ls -l /usr/bin | grep gcc
% ls -l /usr/local/bin | grep gcc
% env CC=/usr/local/bin/gcc-4.9 go run main.go

として、CCを明示する

f:id:otiai10:20150321134016j:plain

このずかちゃんの表情

DRY