Как скомпилировать код, использующий C API Lua 5.1?

У меня есть код, который #include содержит файлы lua.h, lapi.h, lualib.h и lauxlib.h из исходников Lua. Теперь мне нужно скомпилировать этот код.

Моей первой мыслью было включить все файлы .c в исходный код Lua или просто выяснить, какие из этих файлов .c мне действительно нужны, но есть ли лучший или хотя бы правильный способ скомпилировать код, использующий Lua 5.1? C API?

Я должен добавить, что я полное начало компиляции и почти ничего не знаю. Я действительно знаю, что такое GCC и как запустить его из командной строки, но это все.


Чтобы быть более конкретным, я знаю, что моя команда компиляции с использованием GCC будет выглядеть примерно так:

gcc code.c

Теперь мне нужно добавить каждый файл в исходном коде Lua в качестве аргумента, подобного этому?

gcc code.c lapi.c lauxlib.c lbaselib.c lcode.c …

или есть лучший способ сделать это?


person NetherGranite    schedule 05.10.2018    source источник
comment
gcc code.c неправильно. На практике, даже для одной единицы перевода code.c, которая не использует внешнюю библиотеку (например, программу hello-world), вы должны скомпилировать ее с помощью gcc -Wall -Wextra -g code.c -o progbin   -  person Basile Starynkevitch    schedule 06.10.2018
comment
Я никогда раньше не видел ни одного из этих флагов, кроме -o, поэтому, насколько я понимаю, они не нужны. Однако я открыт для того, чтобы вы рассказали, почему они существуют. Что касается -o, нельзя ли скомпилировать и слинковать за один шаг? Я думал, что вы используете -o только в том случае, если хотите скомпилировать файлы кода в объектные файлы, чтобы вы могли связать их вручную.   -  person NetherGranite    schedule 06.10.2018
comment
Есть на практике абсолютно необходимые для разработки программного обеспечения.   -  person Basile Starynkevitch    schedule 06.10.2018


Ответы (1)


Код, использующий Lua API, — это просто программа на C, которая используйте библиотеку Lua. В моей системе Linux/Debian эта библиотека Lua для разработчиков предоставляется в пакете liblua5.3-dev Debian. В этом пакете также есть файлы для pkg-config.

Итак, вы пишете свою программу на C как обычно. Возможно, вы воспользуетесь каким-нибудь инструментом автоматизации сборки. В моей системе Debian это может быть make, ninja и многие другие. Это ваш выбор и ваша ответственность за выбор правильного инструмента автоматизации сборки.

Затем вы настраиваете свой инструмент автоматизации сборки для передачи соответствующих флагов препроцессора компилятору C и для передачи соответствующих флагов компоновки во время компоновки.

В моей системе Linux я бы выбрал сборку с make, конечно, используя GCC компилятор, и я бы отредактировал свой Makefile (см. этот пример), чтобы содержать такие вещи, как:

CC= gcc
CFLAGS= -g $(shell pkg-config --cflags lua5.3) -Wall -Wextra
LDFLAGS+= $(shell pkg-config --libes lua5.3)

Я знаю, что такое GCC и как его запустить из командной строки,

Вы должны быть уверены, что знаете, как практически использовать gcc для компиляции программы, состоящей из нескольких единицы перевода и использование некоторой внешней библиотеки. Вы также должны понимать, почему инструменты автоматизации сборки так полезны. В зависимости от вашего опыта вам, возможно, придется потратить несколько недель на то, чтобы узнать больше об этом.

Моя рекомендация: найдите небольшую бесплатную программу (например, на github) и изучите, как он должен быть построен (так что изучите достаточно, чтобы понять процесс его сборки). Вы многому научитесь. Обратите внимание на такие вещи, как luakit.

person Basile Starynkevitch    schedule 06.10.2018
comment
Извините, я совсем новичок в этом деле. Что именно я буду строить здесь? - person NetherGranite; 06.10.2018
comment
Я даже не понимаю, что вы спрашиваете. Если вы совсем новичок в C, вам лучше сначала научиться практически использовать ваш компилятор C (в командной строке). Какая у вас операционная система? - person Basile Starynkevitch; 06.10.2018
comment
Я знаю, как использовать GCC в командной строке. Я знаю, что команда будет начинаться с gcc code.c, но я не знаю, что добавить дальше. Должен ли я просто просмотреть каждый файл в исходном коде Lua, делая что-то вроде gcc code.c lapi.c lauxlib.c lbaselib.c …, или есть лучший способ? - person NetherGranite; 06.10.2018
comment
Есть лучший способ (вы должны использовать GNU make). И извините, вы действительно не знаете, как использовать GCC в командной строке. Вы должны прочитать Как вызвать GCC. Тогда вам нужно знать, как практически строятся программы из нескольких единиц перевода. - person Basile Starynkevitch; 06.10.2018
comment
Что ж, я хочу скомпилировать некоторый код с использованием Lua C API для некоторого кода Lua, который я пишу, а не стать мастером GCC. Можете ли вы сказать мне, что именно мне не хватает? - person NetherGranite; 06.10.2018
comment
Вы упускаете основы инструмента автоматизации сборки. И я не прошу вас стать мастером GCC (у меня 10-летний опыт работы над компилятором GCC, и я не чувствую себя мастером в этом) - person Basile Starynkevitch; 06.10.2018
comment
Давайте продолжим обсуждение в чате. - person Basile Starynkevitch; 06.10.2018