2011-02-06 10 views
1

私はC++アプリケーションでのLuaを組み込むと私は、次のリンクエラーを取得しています:これらのエラーが発生している理由を埋め込みのLua:リンケージ問題(liblua5.1.a)

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

+0

本当に完全なエラーですか?もし '-Wl、-v'を使って' -v'(冗長)オプションをリンカに渡すとどうなりますか?おそらく入力ファイルや記号などがないかのようです。 – Cascabel

+0

@Jefromi:あなたは正しいです。静的なアーカイブファイルの代わりにsoファイルを追加しておくべきです。今すぐ動作します – oompahloompah

答えて

2

は、ノートがあります:C++アプリケーションでのLuaを組み込む上

LuaはANSI Cのクリーンなサブセットであり、CまたはCとしてコンパイルすることができますので、予めご了承ください++ 。 Luaヘッダーは、luaがCまたはC++としてコンパイルできるように、{#ifdef __cplusplus extern "C" {#endif ... Lua header ...#ifdef __cplusplus} #endif}を付けないでください。ファイルの内容を変更する必要はありません。

LuaがC++アプリケーション(つまりCからC++へのリンク)に埋め込むために、パッケージ化されたバイナリで典型的なCライブラリとしてコンパイルされた場合、インクルードの周りにextern "C"を配置する必要があります例えば、あなたのC++アプリケーションでLuaのヘッダの

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

これを行わない場合は、理由はC++の名前マングルのリンクエラーを取得することがあります。

メーリングリストでこれに不平を言ってはいけません。 :-)メーリングリストを検索する時間は、これまでに何回もカバーされていたので、時間をかけてください。

ライブラリのあらかじめパッケージ化されたバイナリを配布している場合は、C(おそらく)またはC++としてluaコアをコンパイルしていて、Cとしてluaをコンパイルした場合、これを示すためにluaヘッダーを修正してください。しかし、あらかじめ作成されたライブラリをluaに使用することは、著者には推奨されません。アプリケーションにluaソースを直接組み込むことを推奨します。議論のためのBuildingModules(ページの終わり)を参照してください。

デフォルトでは、lua 5.1以降がC++としてコンパイルされている場合、(コンパイル時に)構成可能ですが、longjmp/setjmpではなくスタックを巻き戻すためにC++例外が使用されます。これについては、LUAI_THROW/LUAI_TRYの近くのluaconf.hを参照してください。

+0

Spot on。また、 'lauxlib.h'と' lualib.h'も同じ方法(必要な場合)に含める必要があります。 –

1

あなたのC++ソースにlua.hppを含めることができます

関連する問題