Встраивание Lua в C ++: проблемы со связыванием (liblua5.1.a) - PullRequest
1 голос
/ 06 февраля 2011

Я встраиваю Lua в приложение C ++ и получаю следующие ошибки компоновки:

g++     -o dist/Debug/GNU-Linux-x86/testluaembed build/Debug/GNU-Linux-x86/src/main.o build/Debug/GNU-Linux-x86/src/LuaBinding.o -L../../mainline/tanlib_core/dist/Debug/GNU-Linux-x86 -L../../mainline/tanlib++/dist/Debug/GNU-Linux-x86 -L/usr/lib ../../mainline/tanlib_core/dist/Debug/GNU-Linux-x86/libtanlib_core.so ../../mainline/tanlib++/dist/Debug/GNU-Linux-x86/libtanlibpp.so /usr/lib/liblua5.1.a /usr/lib/libtolua++5.1.a /usr/local/boost_1_45_0/stage/lib/libboost_filesystem.a /usr/local/boost_1_45_0/stage/lib/libboost_system.a 
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `gctm':
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/testluaembed] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

Кто-нибудь знает, почему возникают эти ошибки и как их исправить?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

В 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 для обсуждения этого.

1 голос
/ 15 июня 2012

Вы можете просто включить lua.hpp в ваш источник c ++

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...