簡體   English   中英

在C ++中嵌入Lua:鏈接問題(liblua5.1.a)

[英]Embedding Lua in C++: linkage problems (liblua5.1.a)

我將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

有誰知道為什么會發生這些錯誤,以及如何解決這些錯誤?

http://lua-users.org/wiki/BuildingLua中

有一個注釋:

在C ++應用程序中嵌入Lua的注意事項

請注意,Lua是ANSI C的干凈子集,可以編譯為C或C ++。 Lua頭文件中不帶有{#ifdef __cplusplus extern“ C” {#endif ... Lua頭文件...#ifdef __cplusplus} #endif},因此可以通過更改lua的名稱將其編譯為C或C ++。文件,而無需對文件內容進行任何更改。

如果lua被編譯為C庫(通常是預打包的二進制文件),則要將Lua嵌入C ++應用程序(即,將C鏈接到C ++),則必須在包含Lua標頭的地方放置extern“ C”在您的C ++應用程序中,例如

extern "C" {
#include "lua.h"
}

如果不這樣做,則可能由於C ++名稱修改而導致鏈接錯誤。

請不要在郵件列表上對此抱怨。 :-)花點時間搜索郵件列表,因為以前已經討論過很多次。

可能會說,如果要分發庫的預打包二進制文件,那么您已經將lua核心編譯為C(最有可能)或C ++,並且如果將lua編譯為C,則應修改lua頭文件表示這一點。 但是,作者不建議將預構建的庫用於lua,他們建議直接將lua源合並到您的應用程序中。 有關討論,請參見BuildingModules(頁面末尾)。

默認情況下,如果lua 5.1或更高版本被編譯為C ++,它將使用C ++異常展開堆棧,而不是longjmp / setjmp,盡管這是可配置的(在編譯時)。 有關此問題的討論,請參見LUAI_THROW / LUAI_TRY附近的luaconf.h。

您只需在您的C ++源代碼中包含lua.hpp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM