2013-12-11 3 views
3

Я пытаюсь запустить ОЦП для golang со следующим примером (учитывая при go-wiki -> Global Functions):golang: ОЦП ехЬегп не работает

foo.go файл:

package gocallback 

import "fmt" 

/* 
#include <stdio.h> 
extern void ACFunction(); 
*/ 
import "C" 

//export AGoFunction 
func AGoFunction() { 
     fmt.Println("AGoFunction()") 
} 

func Example() { 
     C.ACFunction() 
} 

foo.c файл:

#include "_cgo_export.h" 
void ACFunction() { 
    printf("ACFunction()\n"); 
    AGoFunction(); 
} 

При запуске этого примера появляется следующая ошибка:

# command-line-arguments 
/tmp/go-build770916112/command-line-arguments/_obj/foo.cgo2.o: In function `_cgo_3234419c4c2a_Cfunc_ACFunction': 
./foo.go:36: undefined reference to `ACFunction' 
collect2: ld returned 1 exit status 

Я не могу проследить это. Почему ACFunction является undefined? или я чего-то не хватает?

go version: идти версия go1.1.2 линукс/386

+0

Ваш сокращенный пример, похоже, подходит для меня. В вашем файле 'foo.go' нет 36 строк, возможно ли, что ошибка существует в некотором коде, который вы удалили? –

+0

Нет, я не удалял код. Эта часть линии также смутила меня. Как вы компилируете cgo? Я использую 'go run foo.go'. Есть ли какая-либо конкретная версия gcc или 32-разрядная/64-разрядная машина или что-нибудь еще? –

+0

Я использовал 'go build packagename'. Я тестировал версии 1.1.2 и 1.2 на Linux/amd64. –

ответ

7

На основе комментариев вопрос, кажется, что вы пытаетесь построить и запустить программу с go run foo.go.

Это терпит неудачу с ошибкой go run: cannot run non-main package, но преобразование имени пакета в main и добавление main функции делает воспроизвести ошибку в вопросе. Это похоже на то, что он пытается скомпилировать только файл foo.go, а не файл компаньона foo.c.

Если вы размещаете файлы в каталоге под $GOPATH/src и используете go build packagename для создания программы, она должна успешно собрать все исходные файлы в пакете.

Смежные вопросы