Ok, the sqmod.h and sqmod.c work with binary modules in the following manner: BASICS The module must export a function named sq_import() with the following prototype: SQRESULT sq_import(HSQUIRRELFRAME); The frame passed to the function contains the version, a vm handle, and the whole API as function pointers without the "sq_". Here is what I mean: SQRESULT sq_import(HSQUIRRELFRAME hf) { HSQUIRRELVM vm = hf->vm; hf->pushroottable(vm); hf->pushstring(vm,"SomeVariable",-1); hf->pushinteger(vm,-1); hf->rawset(vm,-3); } I think that shows what I'm talking about nicely. You don't have to link to the Squirrel library in the module, only include the headers (including sqmod.h) PROPER BEHAVIOR The sq_import() function has to do all the work, installing all of its functions and so on. It should check for an expected version of squirrel, which could be a bit tricky since the version is a string and not a simple integer or float. It should also add its name to a root table called "_modules_" and associate that to a float with its version. It should also check this value before doing anything, just in case someone tries to import the same module twice. Obviously, return the stack just as you found it. If some kind of error occurs, return SQ_ERROR as the result, otherwise return SQTrue.