2011-12-18 11 views
-1

私のコード埋め込みのLUAランタイムエラー:シンボルが見つかりません:_luaL_newstate

inline int DOFILE(string& filename) { 

    printf("lua_open\n"); 
    /* initialize Lua */ 
    lua_State* L = lua_open(); 

    printf("lua_openlibs\n"); 
    /* load Lua base libraries */ 
    luaL_openlibs(L); 

    printf("lua_dofile\n"); 
    /* run the script */ 
    int ret = luaL_dofile(L, filename.c_str()); 

    printf("lua_close\n"); 
    /* cleanup Lua */ 
    lua_close(L); 

    return ret; 
} 

コンパイルオプション:

obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", "-D_LARGEFILE_SOURCE", "-Wall", "-llua-5.1"] 

も、それらのすべてが

警告報告し、 '-llualib' '-llua' を試してみました
i686-apple-darwin11-llvm-g++-4.2: -llua-5.1: linker input file unused because linking not done 

私が実行すると、それは報告:

lua_open 
dyld: lazy symbol binding failed: Symbol not found: _luaL_newstate 
    Referenced from: /Users/gl/workspace/node-lua/build/Release/node_lua.node 
    Expected in: flat namespace 

dyld: Symbol not found: _luaL_newstate 
    Referenced from: /Users/gl/workspace/node-lua/build/Release/node_lua.node 
    Expected in: flat namespace 
+0

この質問を見るhttp://stackoverflow.com/questions/8552560/embedding-lua-in-c/8552620#8552620 –

+1

ビルドシステムには 'obj.ldflags'設定のようなものがありますか?もしそうなら、そこにライブラリを置く。 – Mat

+0

@Mat私は確かにわかりませんが、実際には私はC++のnewbです。node-wafをwafだけ使ってノードアドオンを作成しようとしています。私はそれをgoogleするよ。ありがとう。 –

答えて

1

ライブラリーにはobj.ldflagsパラメーターを使用する必要があります。

は、使用しているビルド・ツールは、2つのステップでそのバイナリを生成します。

  1. コンパイル
  2. リンク

コンパイルステップは、obj.cxxflagsコンパイラフラグを使用しています。ライブラリはコンパイルする必要はないので、リンカフラグ(-lfoo)を渡すことは有用ではありません。コンパイラはそれらをまったく使用しません(したがって、警告)。

リンクステップはobj.cxxflagsobj.ldflagsの両方を使用する必要があります。される(それはg++ -o thing thing.cpp -lpthreadの両方例えば、コンパイルと同時にリンクを行うには非常に簡単なコードのために珍しいことではありません

ldは。リンカの名前です)。しかし、より大きなビルドのために、コンパイルの分離およびリンク通常)。