Как расширить Lua с помощью статической библиотеки C ++?

У меня есть приложение Visual Studio 2008 C ++ 03, которое использует Lua 5.2.1. Я хотел бы дополнить Lua модулем под названием "foo", но когда я звонюrequire("foo") в моем скрипте Lua я получаю ошибку:

foo_test.lua:1: module 'foo' not found:
    no field package.preload['process']
    no file '!\lua\process.lua'
    no file '!\lua\process\init.lua'
    no file '!\process.lua'
    no file '!\process\

Мой скрипт Lua:

foo.bar()

Мой файл lua_foo.h:

#include <lua.h>
extern "C" int luaopen_foo( lua_State* L );

Мой файл lua_foo.cpp:

#include "lua_foo.h"
#include <lua.hpp>

static int l_bar( lua_State *L )
{
    puts( "in bar()" );
    return 1;
}

int luaopen_foo( lua_State *L ) 
{
    static const luaL_Reg foo[] = {
        { "bar", l_bar },
        { NULL, NULL }
    };

    luaL_newlib( L, foo );
    return 1;
}

Они скомпилированы в статическую библиотеку "lua_foo.lib" который статически связан с моим основным исполняемым файлом Lua.

Кто-нибудь может помочь мне понять, где я ошибаюсь? Благодарю. Я бы предпочел избегать оболочек c ++ (пока) и не хочу упаковывать эту библиотеку как отдельную DLL из основного движка Lua.

EDIT

Проблема была в коде двигателя lua. Я добавилluaL_requiref по предложению @NicolBolas.

lua_State* L = luaL_newstate();
if( NULL != L )
{
    luaL_openlibs( L );
    luaL_requiref( token.get(), "foo", luaopen_foo, 1 );
    luaL_dofile( L, "foo_test.lua" );
    lua_close( L );
}

Ответы на вопрос(2)

Ваш ответ на вопрос