Вставить Lua в C ++ - PullRequest
       5

Вставить Lua в C ++

6 голосов
/ 26 февраля 2011

Я хочу написать C ++ - программу, которая может взаимодействовать / вызывать Lua-скрипты во время исполнения.Ключевой концепцией программы является полная независимость от платформы, но мне кажется, что я не могу найти Lua-сборку, которая действительно предлагает что-то такое.

Lua-сборки, которые я обнаружил до сих пор, основаны либо на переменных средыили конкретные библиотеки, такие как .lib, .dll или .so.Официальный Lua-источник от lua.org также не тот, который я ищу, поскольку он определяет основную функцию…

Есть ли простой - в лучшем случае будет что-то вроде sqlite-amalgamation - Lua-интерпретатор для C / C ++, который не имеет ни одной из этих зависимостей?

Ответы [ 3 ]

7 голосов
/ 26 февраля 2011

lua.c содержит main и определяет точку входа для консольного приложения.Если вы удалите его из проекта, то, что осталось, встраивается в автономную библиотеку или динамическую библиотеку, если хотите, просто отлично.

4 голосов
/ 26 февраля 2011

Вот то, что я использую в качестве отправной точки для своих проектов (некоторое время назад я нашел нечто подобное и адаптировал его, чтобы я мог изменить его быстрее):


Файл сценария lua:

    -- Start
    -- Script: myscript.lua
    print("this is lua")
    -- End

Файл C:

    #include <stdlib.h>
    #include <stdio.h>
    #include <lua.h>
    #include <lauxlib.h>
    #include <lualib.h>

    int main(void) {
            static const luaL_reg lualibs[] = {
                    { "base",       luaopen_base },
                    { NULL,         NULL }
            };

            static void openlualibs(lua_State *l) {
                    const luaL_reg *lib;

                    for (lib = lualibs; lib->func != NULL; lib++) {
                            lib->func(l);
                            lua_settop(l, 0);
                    }
            }

            lua_State *l;
            l = lua_open();
            openlualibs(l);

            printf("now calling lua\n\n");
            lua_dofile(l, "myscript.lua");
            printf("\ndo something else\n\n");

            lua_close(l);
            return 0;
    }

Вы можете свободно использовать это в качестве основы для своих проектов.

3 голосов
/ 27 февраля 2011

Сборку с объединением ядра и автономного интерпретатора Lua в один файл см. В файле etc/all.c в официальном исходном коде.Вы, безусловно, можете использовать его в качестве основы для своего собственного объединения, возможно, исключив ссылку на lua.c в последней строке.

Многие более крупные приложения, которые встраивают Lua, делают это, просто добавляя исходные файлы ядра впроект.Это особенно эффективно, если приложение намеревается запретить коду расширения загружать скомпилированные модули из файлов .dll или .so.Если ваше приложение разрешит скомпилированные модули, то обычно лучше связать с общей библиотекой для ядра, чтобы приложение и загруженные модули могли ссылаться на символы из одного экземпляра базовой библиотеки.Обратите внимание, что случайное включение нескольких экземпляров ядра Lua почти гарантированно приводит к очень трудно диагностируемым симптомам.

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