2013-07-04 2 views
1

Моя цель - иметь возможность вызова функций Go из проекта Cocoa, но я только начал с чистого проекта C CoreFoundation.Как связать пакет go в проекте Xcode CoreFoundation?

Вот мой простой идти пакет:

package hello 

import "C" 

import (
    "fmt" 
) 

//export SayHello 
func SayHello() { 
    fmt.Println("Hello, World!") 
} 

Я строю это с помощью go install, который генерирует LIB hello.a.
Я хочу, чтобы иметь возможность связать эту библиотеку с моим проектом CoreFoundation, чтобы я мог позвонить SayHello из моего кода на C.

Выполнение этого приводит к тому, что Xcode показывает предупреждение о том, что hello.a был проигнорирован, потому что он не был построен для архитектуры X86_64.

Я могу сказать, что проблема, скорее всего, связана с тем, что способ компиляции кода Go несовместим с тем, как XCode компилирует проект CoreFoundation.

Поэтому мой вопрос: возможно ли каким-то образом скомпилировать мой пакет Go таким образом, который связан с моим проектом CoreFoundation?

+0

Я так не думаю. Go может вызывать C bt не наоборот, из-за отсутствия времени выполнения Go. – Volker

+0

Я знаю, что C может вызывать функции Go, но вы, возможно, правы из-за времени выполнения, возможно, основная функция должна быть в Go. –

ответ

1

Вы не можете связать библиотеку Go с программой C. Архивы * .a, которые выходят, не совпадают с форматами C-объектов, поэтому компилятор C не знает, как их связать.

Файлы * .a в формате, описанном здесь: http://golang.org/cmd/pack/ и здесь: http://plan9.bell-labs.com/magic/man2html/1/ar

CGO позволяет C вызывать функции go и наоборот, но для правильной работы ссылки основное приложение должно быть двоичным, а не двоичным.

+0

Испугался, но имеет смысл. Спасибо. –

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