如何在没有安装 lua-dev 的机器上构建作为 lua 语言包装器的 c++ 程序?

当我在没有安装 lua-dev 的机器上构建 c++ 包装器时,它会打印以下错误消息:

/usr/bin/ld: warning: liblua5.1.so.0, needed by ../build/lib/liblua_print.so, not found (try using -rpath or -rpath-link)
../build/lib/liblua_print.so: undefined reference to `luaL_newstate'
../build/lib/liblua_print.so: undefined reference to `luaL_openlibs'
../build/lib/liblua_print.so: undefined reference to `lua_pcall'
../build/lib/liblua_print.so: undefined reference to `luaL_loadfile'
../build/lib/liblua_print.so: undefined reference to `lua_close'
collect2: ld returned 1 exit status

我的构建过程是这样的(错误出现在最后一行):

g++ -fPIC -shared -I../include/ -c ./lua_print.cpp -o ../build/object/lua_print.o
g++ -fPIC -shared -o ../build/lib/liblua_print.so ../build/object/lua_print.o -L../lib/ -llua5.1
g++ -fPIC -shared -I. -c ./main.cpp -o ../build/object/main.o
g++ -o ../build/bin/crnn_demo ../build/object/main.o ../build/lib/liblua_print.so

我的程序组织如下:

demo
  lib
    liblua5.1.so(链接到 liblua5.1.so.0)
    liblua5.1.so.0(链接到 liblua5.1.so.0.0.0)
    liblua5.1.so.0.0.0(从安装 lua-dev 的另一台机器复制)
  src
    main.cpp
    lua_print.c
    lua_print.cpp
  include
    lua.hpp(从另一台机器复制)
    ..(从另一台机器复制的其他 lua 的头文件)
  build(结果目录)
    object(存储 main.o、lua_print.o)
    lib(存储 liblua_print.so)
    bin(存储最终结果)
点赞