如何让luabind在ubuntu中工作?

时间:2016-12-18 09:24:39

标签: c++ ubuntu lua luabind

我在Ubuntu中尝试过Luabind的hello world示例,但我无法使其正常工作。有谁知道如何使用g ++使这个例子在Ubuntu中工作?

kuyu@castor-ub:~/dkuyu/Dropbox/practice/lua/luabind$ cat hellobind.cpp 
#include <iostream>
#include <luabind/luabind.hpp>

void greet()
{
    std::cout << "hello world!\n";
}

extern "C" int init(lua_State* L)
{
    using namespace luabind;

    open(L);

    module(L)
    [
        def("greet", &greet)
    ];

    return 0;
}
kuyu@castor-ub:~/dkuyu/Dropbox/practice/lua/luabind$ g++ hellobind.cpp -I/usr/include/lua5.2/ -c -fPIC
kuyu@castor-ub:~/dkuyu/Dropbox/practice/lua/luabind$ g++ -shared -Wl,--whole-archive -o hellobind.so hellobind.o -lluabind -Wl,--no-whole-archive
kuyu@castor-ub:~/dkuyu/Dropbox/practice/lua/luabind$ cat test.lua 
require 'hellobind'
greet()
kuyu@castor-ub:~/dkuyu/Dropbox/practice/lua/luabind$ lua test.lua 
lua: error loading module 'hellobind' from file './hellobind.so':
    ./hellobind.so: undefined symbol: luaopen_hellobind
stack traceback:
    [C]: in ?
    [C]: in function 'require'
    test.lua:3: in main chunk
    [C]: in ?
kuyu@castor-ub:~/dkuyu/Dropbox/practice/lua/luabind$ 

当我运行lua脚本时,lua抱怨&#34;未定义的符号:luaopen_hellobind&#34;。

我的系统详情如下:

kuyu@castor-ub:~/dkuyu/Dropbox/practice/lua/luabind$ dpkg --get-selections | grep -v deinstall | egrep 'lua|boost'
libboost-date-time1.54.0:amd64          install
libboost-dev                    install
libboost-system1.54.0:amd64         install
libboost1.54-dev                install
libboost1.55-tools-dev              install
liblua5.2-0:amd64               install
liblua5.2-dev:amd64             install
libluabind-dev                  install
libluabind-examples             install
libluabind0.9.1                 install
lua5.2                      install
kuyu@castor-ub:~/dkuyu/Dropbox/practice/lua/luabind$ gcc --version
gcc (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

kuyu@castor-ub:~/dkuyu/Dropbox/practice/lua/luabind$ uname -a
Linux castor-ub 3.19.0-43-generic #49~14.04.1-Ubuntu SMP Thu Dec 31 15:44:49 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
kuyu@castor-ub:~/dkuyu/Dropbox/practice/lua/luabind$ 

1 个答案:

答案 0 :(得分:1)

我认为您正在查看此示例GridViewRowEventArgs,他们似乎以不同方式加载共享库。试试这样的lua脚本:

<script>
function getheaderHTML()	{
	document.writeln('  <div id="nav">');
	document.writeln('    <a href="index.html">number 1</a>|<a href="students.html">number 2</a>');
	document.writeln('  </div>');
	document.writeln('  <div id="header">');
	document.writeln('    <img src="header.jpg" alt="testing" width=100% height=260>');
	document.writeln('  </div>');
}

function getfooterHTML()	{
	document.writeln('  <div id="footer">');
	document.writeln('    &#169;2016');
	document.writeln('  </div>');
}  
</script>

<div id="container">
<script>
  getheaderHTML();
</script>
  <div id="lcolumn">
    <p>Hello</p>
  </div>
  <div id="rcolumn">
    <p><Hello</p>
  </div>
<script>
	getfooterHTML();
</script>
</div>