Самостоятельная статическая линковка Go и C

Введение

В языке C процесс создания выполняемого файла проходит следующие этапы:
1. обработка препроцессором
2. Компиляция файлов в объектные файлы
3. Линковка (объединение) скомпилированных объектных файлов в исполняемый файл

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

Получение объектных файлов C

Для того, что бы получить объектный файл программы написанной на C нужно передать ее компилятору с соответствующим параметром, в случае gcc это -c

gcc -c main.c -o main.o

Получение объектных файлов Go

Для того, что бы объектный файл получить из кода написанного на го нужно к параметру build указать дополнительную опцию -buildmode=c-archive

Линкова

После того как оба файла будут готовы остается их слинковать тем же ggc

gcc main.o test.a -pthread -o main

Примечание

Любая программа на го имеет в себе некоторый оверхед в виде сборщика мусора и других полезных вещей, некоторые из них работают в отдельном потоке. По этому, для того, что бы слинковать файлы среди которых есть объектные файлы полученные из исходников программы на Go необходимо включить объектные файлы реализующие функционал работы с потоками. Именно по этому нужно так же добавить параметр -pthread

Пример

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>