Sorry for the late response. I've created the following script (called test.lua): ----------------- 8< ------------------- local ffi = require("ffi") ffi.cdef[[ typedef int apr_status_t; typedef struct apr_pool_t apr_pool_t; apr_status_t __stdcall apr_env_get(char **value, const char *envvar, apr_pool_t *pool); ]] local apr = ffi.load("./libapr-1-0.dll") -- <-- Use the DLL name here print(apr.apr_env_get) -- Ought to print cdata<...> ----------------- 8< ------------------- And here is what I got when I ran it: ----------------- 8< ------------------- e:\luajit.exe: test.lua:10: cannot resolve symbol 'apr_env_get': The specified procedure could not be found. stack traceback: [C]: in function '__index' test.lua:10: in main chunk [C]: at 0x00401e70 This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. ----------------- 8< ------------------- I guess it was unable to find the symbol and then crashed. Some information which might be of interest: $ file libapr-1-0.dll libapr-1-0.dll: PE32 executable for MS Windows (DLL) (console) Intel 80386 32-bit $ objdump -x libapr-1-0.dll libapr-1-0.dll: file format pei-i386 libapr-1-0.dll architecture: i386, flags 0x0000013b: HAS_RELOC, EXEC_P, HAS_DEBUG, HAS_SYMS, HAS_LOCALS, D_PAGED start address 0x67ec1060 Characteristics 0x2106 executable line numbers stripped 32 bit words DLL <...> [1510](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x000154d0 _apr_env_get@12 ./luajit.exe LuaJIT 2.0.2 -- Copyright (C) 2005-2013 Mike Pall. http://luajit.org/ JIT: ON CMOV SSE2 SSE3 fold cse dce fwd dse narrow loop abc sink fuse I'm running 64bit Windows 7, both LuaJIT and libapr are compiled for 32 bit. This dll is working fine in the other dll of our internal product. I'm not an expert on building DLL's on windows, so probably there is something wrong with the dll. I could upload it to some google drive if it helps. Thanks! -- Regards, Konstantin