Как вы используете cgo без использования make? - PullRequest
2 голосов
/ 13 декабря 2011

Я использую специальный инструмент сборки для компиляции проектов go, и мне нужен способ использовать cgo в моем проекте.

Проблема в том, что документация cgo говорит только о том, как использовать ее с make.

Что мне действительно нужно знать, так это то, какие сгенерированные файлы нужно обрабатывать, какими инструментами и в каком порядке это нужно делать.Я попытался прочитать make.pkg в директории с исходным кодом go, но мои лучшие попытки потерпели неудачу.

Мой тестовый dll очень прост, единственная функция, которая возвращает 1 при каждом вызове, и код go для использования этой функции.также прост.

Вывод с консоли, созданный в результате успешного запуска make в проекте cgo, был бы очень полезен.

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Вывод запущенного make на 32-битном Linux в каталоге misc / cgo / life :

# gomake _obj/life.a
CGOPKGPATH= cgo --  life.go 
touch _obj/_cgo_run
8g  -o _go_.8  _obj/life.cgo1.go _obj/_cgo_gotypes.go
8c -FVw -I ${GOROOT}/pkg/linux_386 -I . -o "_cgo_defun.8" _obj/_cgo_defun.c
gcc -m32 -I . -g -fPIC -O2 -o _cgo_main.o -c   _obj/_cgo_main.c
gcc -m32 -g -fPIC -O2 -o c-life.o -c   c-life.c
gcc -m32 -I . -g -fPIC -O2 -o life.cgo2.o -c   _obj/life.cgo2.c
gcc -m32 -I . -g -fPIC -O2 -o _cgo_export.o -c   _obj/_cgo_export.c
gcc -m32 -g -fPIC -O2 -o _cgo1_.o _cgo_main.o c-life.o life.cgo2.o _cgo_export.o  
cgo -dynimport _cgo1_.o >_obj/_cgo_import.c_ && mv -f _obj/_cgo_import.c_ _obj/_cgo_import.c
8c -FVw -I . -o "_cgo_import.8" _obj/_cgo_import.c
rm -f _obj/life.a
gopack grc _obj/life.a _go_.8  _cgo_defun.8 _cgo_import.8 c-life.o  life.cgo2.o _cgo_export.o

Строка cgo -- life.go создает следующие файлы:

_obj/_cgo_.o
_obj/life.cgo1.go
_obj/life.cgo2.c
_obj/_cgo_gotypes.go
_obj/_cgo_defun.c
_obj/_cgo_main.c
_obj/_cgo_flags
_obj/_cgo_export.c
_cgo_export.h
1 голос
/ 13 декабря 2011

" Я использую специальный инструмент сборки для компиляции проектов go, и мне нужен способ использовать cgo в моем проекте. "

... и этот подход приводит к проблемам.Использование стандартного способа с Makefile - это просто, легко, проверено, задокументировано и т. Д.

Я понимаю, что не отвечаю (прямо) на ваш вопрос.Вместо этого мой «ответ»: я настоятельно рекомендую использовать стандартный способ.Не создавайте проблем для себя, выбирая другие, не поддерживаемые напрямую опции.

Тем не менее, я думаю, что есть способ избежать Makefiles, я просто никогда там не был, извините.Я обычно ленив / не хватает времени, поэтому я использую самый простой / быстрый способ добиться цели.Вы можете попробовать то же самое; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...