Компиляция в win64 под linux64 CGO

328 views
Skip to first unread message

Владимир Сагов

unread,
Jul 2, 2018, 11:25:01 PM7/2/18
to Golang Russian
Прошу помощи у экспертов.

предисловие. 
есть небольшая прога на go которая пользует github.com/mattn/go-oci8
разработка ведется на windows, выполнены все танцы с бубном по установке x86_64-w64-mingw32 и gcc. Компиляция под windows проходит успешно, формируется рабочий exe - все прекрасно
также есть другой код который успешно компилируется под linux64 с настройками GOARCH=amd64 GOOS=linux CGO_ENABLED=0

Но, с данными настройками данная программа (с пакетом github.com/mattn/go-oci8) не компилируется. Поиск в гугле привел меня к тому что нужно пользовать нечто подобное

GOARCH=amd64
GOOS=linux
CGO_ENABLED=1
CC=x86_64-w64-mingw32-gcc

Но теперь выдается другая стабильная ошибка 

# runtime/cgo

gcc_linux_amd64.c: In function '_cgo_sys_thread_start':

gcc_linux_amd64.c:62:2: error: unknown type name 'sigset_t'; did you mean '_sigset_t'?

sigset_t ign, oset;

^~~~~~~~

_sigset_t

gcc_linux_amd64.c:67:2: error: implicit declaration of function 'sigfillset' [-Werror=implicit-function-declaration]

sigfillset(&ign);

^~~~~~~~~~

gcc_linux_amd64.c:62:16: error: unused variable 'oset' [-Werror=unused-variable]

sigset_t ign, oset;

^~~~

cc1.exe: all warnings being treated as errors



В какую сторону копать ?

Daniel Podolsky

unread,
Jul 3, 2018, 12:59:53 AM7/3/18
to gola...@googlegroups.com
Cgo и кроскомпиляция не совместимы. Компиляйте в докере

--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Dmitry Dukhov

unread,
Jul 3, 2018, 3:02:50 AM7/3/18
to Golang Russian
Daniel, а объясните pls причем здесь gcc? Разве недостаточно для кросскомпиляции установить go и вперед
Зачем Владимир устанавливал . mingw и прочее?

Alex Lurye

unread,
Jul 3, 2018, 3:12:49 AM7/3/18
to Golang Russian
CGO - это инструмент для встраивания C-кода в программы на Go. Для этого нужен компилятор C для целевой платформы, все библиотеки и т.д. Я уверен, его можно заколдовать, чтобы собрать линукс-бинарник из-под винды, но геморрой того стоить не будет. Проще взять нормальный линукс: докер, виртуалку, облако - что угодно, и там собрать проект за минуту, чем потерять неделю на настройку кросс-компиляции.

Alexey “AlekSi” Palazhchenko

unread,
Jul 3, 2018, 3:16:07 AM7/3/18
to gola...@googlegroups.com
Можно попробовать взять https://github.com/karalabe/xgo. Но я согласен с Алексом – если быстро не заработает, лучше собирать в виртуальной машине.

–-–
Алексей «AlekSi» Палажченко

Владимир Сагов

unread,
Jul 3, 2018, 7:49:09 AM7/3/18
to Golang Russian
Да так и есть. Некоторые пакеты требуют С. И для компиляции в windows пришлось устанавливать mingw и gcc. Но это не работает если компилять под Linux. так что самое простое для себя выбрал в докере компилять. Спасибо за помощь

вторник, 3 июля 2018 г., 10:12:49 UTC+3 пользователь Alex Lurye написал:
Reply all
Reply to author
Forward
0 new messages