On 25/11/2010 10:49, Axel Kittenberger wrote:
Thanks for the suggestions. Linking statically however causes 
crashes if you ever
pull in anything else dynamically (different malloc/free address 
spaces). That means
that you can no longer ever link in a DLL (eg. luasocket) once the 
main Lua is not
also a DLL.
This comes as surprise for me, can someone second that? If true, is 
this a windows only
limitation or universal?
To my knowledge (there are people with more experience in the field 
that can comment more precisely), the main issue is that in Windows at 
least, several C runtime DLLs can coexist. It went particularly ugly 
with the latest versions of Visual Studio...
The above comment is preventive: everything can be OK in this 
scenario, but indeed, you can find yourself with a block of memory 
allocated by one Windows runtime DLL (eg. calling malloc() in one 
library), and free it with another (eg. calling free() in the main 
application), which leads to a crash.
It can be better if as a rule, the library that allocated memory also 
provides the way to free it, and users stick to this policy.