В http://lua -users.org / wiki / BuildingLua
есть примечание:
Примечание по встраиванию Lua в приложения C ++
Обратите внимание, что Lua является чистым подмножеством ANSI C и может быть скомпилирован как C или C ++. Заголовки Lua не идут с {#ifdef __cplusplus extern "C" {#endif ... Заголовок Lua ... # ifdef __cplusplus} #endif}, так что lua можно скомпилировать как C или C ++, просто изменив имя файлы, не внося никаких изменений в содержимое файла.
Если lua была скомпилирована как библиотека C, что типично для предварительно упакованных двоичных файлов, для того, чтобы встроить Lua в приложение C ++ (т.е. ссылку C на C ++), вам нужно будет поместить extern "C" вокруг включения заголовки Lua в вашем приложении C ++, например,
extern "C" {
#include "lua.h"
}
Если вы этого не сделаете, вы можете получить ошибки ссылок из-за искажения имени в C ++.
Пожалуйста, не жалуйтесь об этом в списке рассылки. :-) Потратьте время на поиск в списке рассылки, так как об этом уже много раз говорилось.
Можно утверждать, что если вы распространяете предварительно упакованные двоичные файлы библиотек, то вы скомпилировали ядро lua как C (скорее всего) или как C ++, а если вы скомпилировали lua как C, вам следует изменить заголовки Луа, чтобы указать это. Однако, использование готовых библиотек для lua не рекомендуется авторами, они рекомендуют напрямую включать источник lua в ваше приложение. См. BuildingModules для обсуждения (конец страницы).
По умолчанию, если lua 5.1 или новее скомпилирован как C ++, он будет использовать исключения C ++ для размотки стека, а не longjmp / setjmp, хотя это настраивается (во время компиляции). Смотрите luaconf.h возле LUAI_THROW / LUAI_TRY для обсуждения этого.